Предупреждение PHP cURL во время curl_multi_add_handle - PullRequest
3 голосов
/ 17 января 2010

Мой код PHP

    $urlArray = array('http://firsturl.com', 'http://secondurl.com');
    $nodeCount = count($urlArray);
    $chContainter = array();
    $mh = curl_multi_init();
    for($i = 0; $i < $nodeCount; $i++) {
        $chContainter[$i] = curl_init();
        curl_setopt($chContainter[$i], CURLOPT_URL, $urlArray[$i]);
        curl_setopt($chContainter[$i], CURLOPT_HEADER, 0);
        curl_setopt($chContainter[$i], CURLOPT_RETURNTRANSFER,1);
        curl_multi_add_handle($mh,$chContainter[$i]);
    } 

выдает следующее предупреждение

Предупреждение: (ноль) (): 4 недействительно cURL обрабатывает ресурс в Unknown on строка 0

Предупреждение: (ноль) (): 5 недействительно cURL обрабатывает ресурс в Unknown on строка 0

Я провел некоторую отладку и обнаружил, что при попытке добавить дескриптор curl к $ mh было сгенерировано предупреждение.

Пожалуйста, помогите. Спасибо.

Ответы [ 4 ]

4 голосов
/ 04 февраля 2011

Обязательно инициализируйте curl_multi_init() только после инициализации сеансов curl_init(), в противном случае вы получите эту ошибку.

0 голосов
/ 10 октября 2013

Я только что столкнулся с этой проблемой

мой код:

$url = 'www.meilishuo.com';
$queue = curl_multi_init();
$ci = createCh($url);
$ciSec = createCh($url);
curl_multi_add_handle($queue, $ci);
curl_multi_add_handle($queue, $ciSec);

function createCh($url) {
    $ci = curl_init();
    /* Curl settings */
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ci, CURLOPT_NOSIGNAL,1);
    curl_setopt($ci, CURLOPT_TIMEOUT, 1);
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ci, CURLOPT_HEADER, 0);
    curl_setopt($ci, CURLOPT_URL, $url);
    curl_setopt($ci, CURLOPT_FOLLOWLOCATION,1);
    return $ci;
}

предупреждение:

Предупреждение PHP: (null) (): 34 не является допустимым ресурсом дескриптора cURL в Unknown в строке 0

Предупреждение PHP: (null) (): 35 не является допустимым ресурсом дескриптора cURL в Unknown в строке 0

Предупреждение PHP: (null) (): 34 не является допустимым ресурсом дескриптора cURL в Unknown в строке 0

Предупреждение PHP: (null) (): 35 не является допустимым ресурсом дескриптора cURL в Unknown в строке 0

фикс:

Я добавлю это наконец:

    curl_multi_close($queue);

проблема решена, но я не понимаю, почему она решена после добавления.

что это значит?

«Неизвестно в строке 0» (часть предупреждения)

0 голосов
/ 29 мая 2013

In manual (см. Пример # 1) показывает, что curl_multi_init() вызывает после curl_init(). Так что это должно работать:

$urlArray = array('http://firsturl.com', 'http://secondurl.com');
$nodeCount = count($urlArray);
$chContainter = array();
for ($i = 0; $i < $nodeCount; $i++) {
    $chContainter[$i] = curl_init();
    curl_setopt($chContainter[$i], CURLOPT_URL, $urlArray[$i]);
    curl_setopt($chContainter[$i], CURLOPT_HEADER, 0);
    curl_setopt($chContainter[$i], CURLOPT_RETURNTRANSFER,1);
}

$mh = curl_multi_init();
for ($i = 0; $i < $nodeCount; $i++) {
    curl_multi_add_handle($mh,$chContainter[$i]);
}

Не очень элегантно, но это решило мою похожую проблему.

0 голосов
/ 29 сентября 2010

Я только что решил эту проблему с помощью одного из моих собственных сценариев. Проблема была вызвана URL-адресами с незакодированными пробелами, например: http://example.com/space here/. Я решил проблему, заменив любое простое пространство на% 20, например: http://example.com/space%20here/

Из других материалов для чтения в Интернете кажется, что эта ошибка может возникать по любой причине, которая делает URL недоступным или иным образом искаженным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...