[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: curl_multi
Barkas190
Уважаемые форумчане, помогите кто сколько сможет, есть следующий сценарий
<?php
set_time_limit(30); // лимит выполнения скрипта (по умолчанию обычно стоит в php.ini 30 сек)
//инициализация нескольких cURL-сессий
$ch1=curl_init();
$ch2=curl_init();
//указываем параметры
curl_setopt($ch1, CURLOPT_URL, "http://ru.aliexpress.com/category/202001195/mobile-phones.html");
curl_setopt($ch1, CURLOPT_HEADER, 0);
//curl_setopt($ch1, CURLOPT_NOBODY, 1);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);//TRUE для возврата результата передачи в качестве строки из curl_multi_exec вместо прямого вывода в браузер
curl_setopt($ch2, CURLOPT_URL, "http://ru.aliexpress.com/category/202001195/mobile-phones/2.html");
curl_setopt($ch2, CURLOPT_HEADER, 0);
//curl_setopt($ch2, CURLOPT_NOBODY, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
$mh=curl_multi_init();//создаем множественный CURL обработчик или по другому инициализируем "контейнер" для отдельных соединений (мультикурл)
curl_multi_add_handle($mh, $ch1);// добавляет к дескриптору нашего мультизапросного соединения отдельное созданное соединение
curl_multi_add_handle($mh, $ch2);
//выполнение
$active = null;// количество активных потоков
do {$mrc=curl_multi_exec($mh, $active);}//curl_multi_exec одновременно отправляет на выполнение все объявленные потоки; в переменную $active заносится количество выполняемых потоков
while ($mrc==CURLM_CALL_MULTI_PERFORM); //пока возвращенное значение является константой ‘CURLM_CALL_MULTI_PERFORM’, значит ответ от сервера еще не получен
while ($active&&$mrc==CURLM_OK) {
if(curl_multi_select($mh)!=-1) { //curl_multi_select блокирует выполнение скрипта, пока какое-либо из curl_multi соединений не станет активным.
do {$mrc=curl_multi_exec($mh, $active);}
while ($mrc==CURLM_CALL_MULTI_PERFORM);
}
}
//закрытие
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
$result = preg_match_all('/itemprop="name"(.*)<\/a>/',$mrc,$found);
foreach ($found as $v1) {// переменная $found является двумерным массивом, поэтому сначала извлекаем значения в $v1, которая тоже макссив, а потом из $v1 извлекаем в $v2
foreach ($v1 as $v2) {
$rest = substr($v2, 17); //функция работы со строками, возвращает подстроку строки $v2, начиная с 17 символа
echo "<ul><li>$rest<br></li></ul>";//результат в виде ненумерованного списка
}
}
?>


при запуске в браузере получаю ответ:
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\...\index.php on line 23

Barkas190
Уважаемые форумчане, помогите кто сколько сможет, есть следующий сценарий

<?php
set_time_limit(30); // лимит выполнения скрипта (по умолчанию обычно стоит в php.ini 30 сек)
//инициализация нескольких cURL-сессий

$ch1=curl_init();
$ch2=curl_init();
//указываем параметры
curl_setopt($ch1, CURLOPT_URL, "http://ru.aliexpress.com/category/202001195/mobile-phones.html");
curl_setopt($ch1, CURLOPT_HEADER, 0);
//curl_setopt($ch1, CURLOPT_NOBODY, 1);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);//TRUE для возврата результата передачи в качестве строки из curl_multi_exec вместо прямого вывода в браузер
curl_setopt($ch2, CURLOPT_URL, "http://ru.aliexpress.com/category/202001195/mobile-phones/2.html");
curl_setopt($ch2, CURLOPT_HEADER, 0);
//curl_setopt($ch2, CURLOPT_NOBODY, 1);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
$mh=curl_multi_init();//создаем множественный CURL обработчик или по другому инициализируем "контейнер" для отдельных соединений (мультикурл)
curl_multi_add_handle($mh, $ch1);// добавляет к дескриптору нашего мультизапросного соединения отдельное созданное соединение
curl_multi_add_handle($mh, $ch2);
//выполнение
$active = null;// количество активных потоков
do {$mrc=curl_multi_exec($mh, $active);}//curl_multi_exec одновременно отправляет на выполнение все объявленные потоки; в переменную $active заносится количество выполняемых потоков
while ($mrc==CURLM_CALL_MULTI_PERFORM); //пока возвращенное значение является константой ‘CURLM_CALL_MULTI_PERFORM’, значит ответ от сервера еще не получен
while ($active&&$mrc==CURLM_OK) {
if(curl_multi_select($mh)!=-1) { //curl_multi_select блокирует выполнение скрипта, пока какое-либо из curl_multi соединений не станет активным.
do {$mrc=curl_multi_exec($mh, $active);}
while ($mrc==CURLM_CALL_MULTI_PERFORM);
}
}

//закрытие
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
$result = preg_match_all('/itemprop="name"(.*)<\/a>/',$mrc,$found);
foreach ($found as $v1) {// переменная $found является двумерным массивом, поэтому сначала извлекаем значения в $v1, которая тоже макссив, а потом из $v1 извлекаем в $v2
foreach ($v1 as $v2) {
$rest = substr($v2, 17); //функция работы со строками, возвращает подстроку строки $v2, начиная с 17 символа
echo "<ul><li>$rest<br></li></ul>";//результат в виде ненумерованного списка
}
}

?>


при запуске в браузере получаю ответ:
Fatal error: Maximum execution time of 30 seconds exceeded in Z:\home\localhost\www\...\index.php on line 23
Быстрый ответ:

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