PHP cURL Предупреждение во время curl_multi_add_handle

Мой 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]); } 

генерирует следующее предупреждение

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

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

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

Пожалуйста помоги. Благодарю.

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

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

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

В руководстве (см. Пример # 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]); } 

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

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

мой код:

 $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» (часть предупреждения)