[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функции CURL
Xes
Разбираюсь с функцией curl_multi_exec
http://www.php.net/manual/ru/function.curl-multi-exec.php

Написано вроди хороше, и даже понятно. Но запускаю пробую на выходе не совсем то, очем пишут, точнее ни совсем то что я ожидал.
curl_multi_exec($mh, $active);

Цитата
$active (still_running) - Ссылка на флаг, указывающий, идут ли еще какие-либо действия.


У меня всевремя эта переменная равна числу элементов (обычных дискрипторов) запиханых в мультикурл.
Я ожидал что это нечто вроди указателя какой по порядку дискриптор в мультикурле сейчас запускается.
--------




Спустя 5 часов, 36 минут, 49 секунд (25.12.2011 - 23:09) Winston написал(а):
А что ты пытаешься сделать? Покажи код.
Вот тоже пример использования мульти-курла.

Спустя 18 часов, 50 минут, 26 секунд (26.12.2011 - 17:59) Xes написал(а):
Я ни че особого сделать не пытаюсь пока просто запускаю и смотрю на переменные как они изменяются.

Свернутый текст

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

#Заголовки браузера
$header = array();
$header[] = 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

// устанавливаем URL и другие соответствующие опции
curl_setopt($ch1, CURLOPT_URL, "http://mail.ru");
curl_setopt($ch1, CURLOPT_HEADER, $header);
curl_setopt($ch2, CURLOPT_URL, "http://listhotel.ru");
curl_setopt($ch2, CURLOPT_HEADER, $header);
curl_setopt($ch3, CURLOPT_URL, "http://listhotel.ru/about");
curl_setopt($ch3, CURLOPT_HEADER, $header);

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

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

$active = null;
//запускаем дескрипторы
$mrc = curl_multi_exec($mh, $active);
echo '<br /><br />'.$mrc.'<br /><br />';
echo '<br /><br />'.$active.'<br /><br />';

$mrc = curl_multi_exec($mh, $active);
echo '<br /><br />'.$mrc.'<br /><br />';
echo '<br /><br />'.$active.'<br /><br />';

$mrc = curl_multi_exec($mh, $active);
echo '<br /><br />'.$mrc.'<br /><br />';
echo '<br /><br />'.$active.'<br /><br />';

$mrc = curl_multi_exec($mh, $active);
echo '<br /><br />'.$mrc.'<br /><br />';
echo '<br /><br />'.$active.'<br /><br />';

echo CURLM_CALL_MULTI_PERFORM.'<br />'.CURLM_OK.'<br />';
......


На выходе печатоет 0 3 0 3 0 3 0 3 -1 0
4 раза запускается хотя дискрипторов 3 ошибку не выводит html кода четвертого не существующего дискриптора нет , что логично. Просто игнорирует ошибку.

Так же echo помещал и во внутрь циклов, примеров, которые приведены в документации результат тот же 0 и количество элементов в мультикурле. Из чего я сдела вывод что можно записать как я вызвать curl_multi_exec столько раз сколько в элементов в мультике.

Я пока представляю себе что curl_multi_exec это чтото вроде mysql_fiech_array
при каждом вызове запускается следующий дискриптор (указатель) а в переменную $active возвращаться его порядковый номер.

Или я не верно понимаю эту функцию.

Вот у тебя запуск:
do
$cme = curl_multi_exec($cmi, $run); // Выполняем запросы пока в наборе есть еще ссылки
while($run > 0);

На маой взгляд цикл зацикленный.

Запуск у них http://php.net/manual/ru/function.curl-multi-init.php
$active = null;
//запускаем дескрипторы
do {
$mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

Я посмотрел $mrc, как и у меня обычно всегда 0 - это значет все ок прошло.
CURLM_CALL_MULTI_PERFORM = -1
Тоесть цикл пройдет только один раз. Если вернется -1 , я не знаю что это значит, наверная какаято задержка или невозможность чегото, то повторить попытку запуска.

Вот пока такая кашица у меня в голове, относительно этой функции.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.