PHP выполняется дольше, чем max_execution_time ... иногда - PullRequest
4 голосов
/ 15 апреля 2011

У меня есть класс PHP, однажды вызванный, устанавливает ограничение по времени до 60 секунд.Единственная особенность этого класса заключается в том, что он использует curl_multi_exec ().

set_time_limit(60);
ini_set('max_execution_time', 60);

Проблема заключается в том, что на странице состояния / сервера Apache эта страница и другая страница, использующая однопоточный завиток, запускаются после их max_execution_timeи доходят до 200 секунд, иногда!

Чего мне не хватает?Есть ли способ настроить Apache для завершения скриптов (или даже соединений), работающих дольше, чем, скажем, 90 секунд?

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

С руководство :

Функция set_time_limit() и директива конфигурации max_execution_time влияют только на время выполнения самого скрипта.Любое время, потраченное на действия, которые происходят за пределами выполнения сценария, например, системные вызовы с использованием system(), потоковые операции, запросы к базе данных и т. Д., Не учитывается при определении максимального времени выполнения сценария.

Поскольку запросы curl подпадают под эту категорию, время, потраченное на ожидание выполнения запроса, не будет учитываться.Вам следует установить для параметра curl CURLOPT_TIMEOUT более низкое значение или контролировать время, затраченное на выполнение сценария самостоятельно.

2 голосов
/ 15 апреля 2011

Aha!Когда вы устанавливаете эту конфигурацию, тикер сбрасывает сам себя, например:

sleep(10);
set_time_limit(20);
sleep(10);
set_time_limit(5);
sleep(10); // dies after 5 seconds

Общее время работы составляет ~ 30 с.

Что касается curl_exec_multi, вы можете установить опцию тайм-аута CURL вместоPHP один.Это зависит от того, кто, по вашему мнению, умрет - соединение с помощью curl или полный запрос.

...