Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> curl_multi, зацикливание, не могу разобраться 
:(
    Опции темы
Barkas190
Дата 11.7.2015, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2015

Репутация: нет
Всего: нет



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

Код

<?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
PM MAIL   Вверх
Barkas190
Дата 14.7.2015, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2015

Репутация: нет
Всего: нет



Форум мертвый смотрю я, не дождешься тут ни ответа ни привета
PM MAIL   Вверх
gta4kv
Дата 14.7.2015, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Вам никто ничего не должен, если что.


У вас скрипт падает по таймауту, что непонятно? Значит за 30 секунд ответ так и не пришел
PM MAIL   Вверх
Barkas190
Дата 15.7.2015, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2015

Репутация: нет
Всего: нет



я и время больше ставил, скрипт вообще бесконечно выполняется
PM MAIL   Вверх
Shark
Дата 21.7.2015, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



Barkas190, может я в чем-то и не прав, что скорее всего, но:
Код

if(curl_multi_select($mh)!=-1) { //curl_multi_select блокирует выполнение скрипта, пока какое-либо из curl_multi соединений не станет активным.

Ок, он заблочит выполнение скрипта. Меня смущается конструкция !=-1 (почему именно -1), а не 0, -10, -100 и т.д.?
А вот это:
Код

while ($mrc==CURLM_CALL_MULTI_PERFORM); //пока возвращенное значение является константой ‘CURLM_CALL_MULTI_PERFORM’, значит ответ от сервера еще не получен

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

P.S. не надо ставить минусы, это просто беглый взгляд и ответ.


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.