Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Коды ошибок для curl_multi
Форумы портала PHP.SU » » Работа с сетью » Коды ошибок для curl_multi

Страниц (1): [1]
 

1. vsll - 14 Мая, 2011 - 17:38:48 - перейти к сообщению
Коды ошибок для curl_multi те же что и для curl ? http://curl[dot]haxx[dot]se/libcurl/c/li[dot][dot][dot]curl-errors[dot]html
PHP:
скопировать код в буфер обмена
  1. do {
  2.                         curl_multi_exec($mh, $running);
  3.                         $info = curl_multi_info_read($mh);
  4.                         if (false !== $info) {
  5.                                 echo $info['result']." for ".$info['handle']." ::: ";
  6.                         }


Результат
... 52 for Resource id #35 ::: 0 for Resource id #34 ::: 28 for Resource id #36...

и как желательно по порядку отображать содержимое массива $info или это невозможно, так как порядок будет тот который curl_multi выбрала при начале работы
изначально Resource id #34 - был нулевым значением массива входных данных, а Resource id #35 - первым, и тд
2. EuGen - 14 Мая, 2011 - 20:02:33 - перейти к сообщению
http://ru.php.net/manual/en/func...ti-info-read.php
Порядок будет не
Vasiliya пишет:
порядок будет тот который curl_multi выбрала при начале работы
а тот, в котором Вы добавляли элементы для обработки curl при помощи
http://ru.php.net/manual/en/func...i-add-handle.php
3. vsll - 15 Мая, 2011 - 15:40:05 - перейти к сообщению
Vasiliya пишет:
Коды ошибок для curl_multi те же что и для curl ? http://curl[dot]haxx[dot]se/libcurl/c/li[dot][dot][dot]curl-errors[dot]html

те же
EuGen пишет:
а тот, в котором Вы добавляли элементы для обработки curl

да, спасибо, именно так, просто я сначала делала так:
PHP:
скопировать код в буфер обмена
  1. $res = array();
  2.                 $i = 0;
  3.                 while ($choice = dbarray($all)) {
  4.                         $res[] .= $choice['proxy_good'];
  5.                         $i++;
  6.                 }
  7.                
  8.                 $result = get_contents($res);                  
  9.                 var_dump ($result);

а потом так, и тогда заработало как надо
PHP:
скопировать код в буфер обмена
  1. $res = array();
  2.                 $i = 0;
  3.                 while ($choice = dbarray($all)) {
  4.                         $res[] .= $choice['proxy_good'];
  5.                         $i++;
  6.                 }
  7.                 $res; //вот это добавила)
  8.                 $result = get_contents($res);                  
  9.                 var_dump ($result);

0 for Resource id #34 ::: 52 for Resource id #35 ::: 28 for Resource id #36 ::: 5secondsarray(3) { [0]=> string(18) "91.143.58.1|||||| " [1]=> NULL [2]=> NULL }
4. vsll - 19 Мая, 2011 - 14:15:12 - перейти к сообщению
Вот геморрой!
EuGen пишет:
Порядок будет не
Vasiliya пишет:
порядок будет тот который curl_multi выбрала при начале работы
а тот, в котором Вы добавляли элементы для обработки curl при помощи

только в том случае, если отображать всю сетку вместе с bool(false), а если с фильтром false !== $info то выдаёт как попало, только id потоков в правильной последовательности...
Ну эт ладно, я чего то не понимаю, если проверять http прокси, то хоть 100 штук одновременно - результат идеальный!!! а если проверять соксы, то если уже 5 штук одновременно, то везде NULL (больше, тоже самое), а если по одному или по два, то соксы определяет нормально...

Получается, что curl_multi с соксами не работает? почему так происходит? или это какие-то настройки на хостинге???
5. EuGen - 19 Мая, 2011 - 14:18:52 - перейти к сообщению
Vasiliya пишет:
а если с фильтром false !== $info то выдаёт как попало, только id потоков в правильной последовательности

На понял, что имеется ввиду. Если id ресурса - то это просто строковое представление, стало быть все ресурсы упорядочиваются верно.
Vasiliya пишет:
а если проверять соксы, то если уже 5 штук одновременно

Зависит от самого SOCKS прокси.
6. vsll - 19 Мая, 2011 - 14:22:54 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. На понял, что имеется ввиду

вот маленький кусочек от реультата
CODE (htmlphp):
скопировать код в буфер обмена
  1. bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) array(3) { ["msg"]=> int(1) ["result"]=> int(7) ["handle"]=> resource(38) of type (curl) } 7 for Resource id #38 ::: array(3) { ["msg"]=> int(1) ["result"]=> int(7) ["handle"]=> resource(34) of type (curl) } 7 for Resource id #34 ::: array(3) { ["msg"]=> int(1) ["result"]=> int(7) ["handle"]=> resource(40) of type (curl) } 7 for Resource id #40 ::: array(3) { ["msg"]=> int(1) ["result"]=> int(7) ["handle"]=> resource(41) of type (curl) } 7 for Resource id #41 ::: bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)


если записать так
PHP:
скопировать код в буфер обмена
  1. do {
  2.                         curl_multi_exec($mh, $running);
  3.                         $sinfo = curl_multi_info_read($mh);
  4.                         var_dump ($sinfo);
  5.                         if (false !== $sinfo) {
  6.                                 echo $sinfo['result']." for ".$sinfo['handle']." ::: ";
  7.                         }
  8.                 } while($running > 0);

(Добавление)
EuGen пишет:
Зависит от самого SOCKS прокси

Ну значит я правильно поняла, что curl_multi не подходит для проверки соксов, вернее проверять можно, но не более двух одновременно, чтобы результат был корректным или нужно параметры как-то по-хитрому записать:
PHP:
скопировать код в буфер обмена
  1. function socks_get_contents($proxy) {
  2.                 $socks = array();
  3.                 $sout = array();
  4.                 $mh = curl_multi_init();
  5.                 foreach ($proxy as $i => $sp) {
  6.                         $socks[$i]=curl_init();
  7.                                                
  8.                         curl_setopt($socks[$i], CURLOPT_CONNECTTIMEOUT, 5);
  9.                         curl_setopt($socks[$i], CURLOPT_URL, "http://www.domen.ru/check.php");
  10.                         curl_setopt($socks[$i], CURLOPT_RETURNTRANSFER, 1);
  11.                         curl_setopt($socks[$i], CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.16) Gecko/20110319");
  12.                         curl_setopt($socks[$i], CURLOPT_TIMEOUT, $_POST['curl_timeout']);
  13.                         curl_setopt($socks[$i], CURLOPT_PROXY, $sp);
  14.                         curl_setopt($socks[$i], CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
  15.                        
  16.                         curl_multi_add_handle ($mh,$socks[$i]);
  17.                 }
7. EuGen - 19 Мая, 2011 - 14:30:31 - перейти к сообщению
Vasiliya пишет:
но не более двух одновременно

Это еще почему.
Насчет false - массив отфильтровать не пробовали? Я не очень представляю просто его назначение у Вас.
8. vsll - 19 Мая, 2011 - 14:33:32 - перейти к сообщению
EuGen пишет:
Насчет false - массив отфильтровать не пробовали?
это я специально для вас сделала (var_dump ($sinfo);) а так у меня всё выводится в человекопонятном виде
PHP:
скопировать код в буфер обмена
  1. if (false !== $sinfo) {
  2.                                 echo $sinfo['result']." for ".$sinfo['handle']." ::: ";
  3.                         }
Вот он фильтр - if (false !== $sinfo)
Что мне с соксами делать, не проверяет корректно большое количество, хоть лбом об клавиатуру бейся !!! Даже таймаут 10 ставила!
9. EuGen - 19 Мая, 2011 - 14:38:48 - перейти к сообщению
Vasiliya пишет:
if (false !== $sinfo)

И что, это как-то нарушает порядок?
по поводу socks:
http://bugs.php.net/bug.php?id=39503
- не Ваш случай? Попробуйте на версии 5.3
10. vsll - 19 Мая, 2011 - 14:44:47 - перейти к сообщению
EuGen пишет:
И что, это как-то нарушает порядок?
да, зато вид человекопонятный, больше ошибки никак не вывести в curl_multi, ни через curl_multi_add_handle, ни через curl_multi_exec, только curl_multi_info_read может у них считывать, а curl_multi_strerror - ерунда, только CURLMcode (8 ошибок)
(Добавление)
EuGen пишет:
http://bugs.php.net/bug.php?id=39503
- не Ваш случай? Попробуйте на версии 5.3

на хостинге
CODE (htmlphp):
скопировать код в буфер обмена
  1.        
  2. 5.2.9
  3. libcurl/7.19.5

она уже работает, но не больше двух - трёх, спасибо EuGen за ссылку вы мне очень помогли, как всегда

 

Powered by ExBB FM 1.0 RC1