Максимальное время выполнения curl_exec - что его вызывает? - PullRequest
7 голосов
/ 04 декабря 2011

Я получаю страшное сообщение:

Fatal error: Maximum execution time of 90 seconds exceeded in /home/pricing.php on line 239

код:

$url = "http://*******.com/feed?f=PR&categories=$cat_id&limit=100&startproducts=$ii&price_min=0.01&sortproducts=score&show=properties";

$c = curl_init($url); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt($c, CURLOPT_USERPWD, "****:****");
$xml = simplexml_load_string(curl_exec($c)); // line 239

строка simplexml_load_string - строка 239, это, безусловно, означает, что канал получен (из-за отсутствия лучшего слова!) И строка загружается, но, конечно, это не может занять более 90 секунд?

Мои вопросы:

1 - что могло / могло бы вызвать это?

2 - безопасно ли увеличить php_value max_execution_time свыше 90 секунд и что считается безопасным максимумом?

3 - есть ли лучший / более быстрый / более стабильный способ сбить подачу, чем при использовании скручивания?

Спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 04 декабря 2011

А1: Да, вы получили ответ на второй вопрос.Это вызвано тем, что php max_execution_time.

A2: Это небезопасно, если вы не размещаете его локально и не знаете, что делает ваш скрипт.Я думаю, что обычная практика - 30 секунд или максимум 300 секунд (5 минут).

A3 Если вы имеете дело с curl, я предпочитаю установить set_time_limit(0) в самом верху вашего php-скрипта (эквивалент уровня кода для max_execution_time in php.ini) и используйте тайм-аут для curl для обработки тайм-аута.

curl_setopt($curl, CURLOPT_TIMEOUT_MS, 2000); //in miliseconds
2 голосов
/ 04 декабря 2011
  1. Зависание от внешней подачи очень медленное

  2. В порядке, чтобы увеличить max_execution_time до более высокого значения, но это не рекомендуется. Если сценарий служит одной из ваших обычных веб-страниц, вам нужно подумать дважды. Ни один пользователь не хочет ждать загрузки страницы более 90 секунд.

  3. Кэшируйте это!

Подробная информация о кеше это! : -

Не супер логика,
это означает, что вы можете подготовить список URL фида,
затем выполните фоновое задание (cronjob), чтобы получить URL каждого фида и сохранить его в локальном хранилище.
Как только локальный XML станет доступным, загрузите с локального

Итак, обратный доступ по требованию, подготовьте XML, прежде чем любой пользователь получит доступ к странице.
Трудности будут заключаться в том, что URL-адреса фида будут разными, есть curl_multi_exec , который должен быть идеальным для одновременного получения нескольких URL.

...