Назад | Перейти на главную страницу

php всегда запускает скрипты, но у меня max_execution_time установлено на 30

У меня есть специальное окно (так что я могу редактировать все настройки) с PHP 5.2.16.

У меня для Max_execution_time и max_input_time установлено значение менее 60, перезапущен apache (с использованием apachectl -k graceful), но сценарии никогда не выходят из строя.

Я тестировал это с двумя сценариями (на самом деле, я впервые заметил это с «настоящими» сценариями, которые, вероятно, должны были истечь по таймауту, но никогда этого не происходило)

while (1) { sleep(10); }

и поскольку очевидно, что sleep () не влияет на max_execution_time (), я попробовал это:

while(1) { file_get_contents($url); }

($ url = большое изображение. Я также повторил материал, поэтому я знал, что он запущен)

Я могу запускать скрипты более 10 минут.

Что я проверил:

Делая это:

echo ini_get('max_execution_time'); 

выводит 60 (из php.ini)

Делая это:

set_time_limit(5); echo ini_get('max_execution_time'); 

эхо 5

но в обоих случаях сценарий будет работать вечно!

И, как уже упоминалось, проблема не только в том, что я использую sleep() - Я заметил, что могу загружать и обрабатывать сотни файлов без необходимости set_time_limit(0) там.

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

Вероятно, вы попадаете в потоковые операции при использовании file_get_contents.

Попробуйте:

while (1) { ;; }

Согласно Руководство по PHP если safe_mode включен, set_time_limit () не будет иметь никакого эффекта.