multi curl не работает пример даже из мануала

E
На сайте с 05.07.2013
Offline
60
6668

пытаюсь освоить мулти курл, но почему-то не могу запустить даже пример из манула:


<?php
// создаем оба ресурса cURL
$ch1 = curl_init();
$ch2 = curl_init();

// устанавливаем URL и другие соответствующие опции
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//создаем набор дескрипторов cURL
$mh = curl_multi_init();

//добавляем два дескриптора
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$active = null;
//запускаем дескрипторы
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
if (curl_multi_select($mh) != -1) {
do {
$mrc = curl_multi_exec($mh, $active);
//echo curl_multi_getcontent($ch1);
//echo curl_multi_getcontent($ch2);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}

//закрываем дескрипторы
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>

при этом апач полностью виснет, приходиться убирать из процессов и перегружать денвер...

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#1


<?php
$TS = microtime(1);
function muti_thread_request($nodes){
$mh = curl_multi_init();
$curl_array = array();
foreach($nodes as $i => $url)
{
$curl_array[$i] = curl_init($url);
curl_setopt($curl_array[$i], CURLOPT_HEADER, 1);
curl_setopt($curl_array[$i], CURLOPT_NOBODY, 1);
curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $curl_array[$i]);
}
$running = NULL;
do {
# usleep(10000);
curl_multi_exec($mh,$running);
} while($running > 0);

$res = array();
foreach($nodes as $i => $url)
{
$res[$url] = curl_multi_getcontent($curl_array[$i]);
}

foreach($nodes as $i => $url){
curl_multi_remove_handle($mh, $curl_array[$i]);
}
curl_multi_close($mh);
return $res;
}

echo '<pre>';
$res = muti_thread_request(array(
'http://yandex.ru',
'http://aptechca.ru',
'http://mail.ru',
'http://apeha.ru',
'http://google.ru',
'http://ramisp.org',
'http://sape.ru'
));
print_r($res);
echo '</pre>';
#echo (microtime(1)-$TS);
?>
Подпись))
дани мапов
На сайте с 06.09.2012
Offline
204
#2

Используйте Open Server, на денвере не работает.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
E
На сайте с 05.07.2013
Offline
60
#3

Милованов Ю.С, спасибо, ваш пример работает, а почему из мануала не работает?

Z
На сайте с 17.09.2010
Offline
34
#4

egralvoid, curl_multi_select() багнутая, в некоторых версиях php возвращает всегда -1.

Либо поменяйте версию php, либо уберите if (curl_multi_select($mh) != -1)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий