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