У меня есть специальное окно (так что я могу редактировать все настройки) с 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
но в обоих случаях сценарий будет работать вечно!
max_execution_time
и max_input_time
в /etc/php.ini
. насколько я могу судить, нет другого php.ini
.max_execution_time
или set_time_limit
И, как уже упоминалось, проблема не только в том, что я использую sleep()
- Я заметил, что могу загружать и обрабатывать сотни файлов без необходимости set_time_limit(0)
там.
Функция set_time_limit () и конфигурационная директива max_execution_time влияют только на время выполнения самого скрипта. Любое время, потраченное на действия, происходящие вне выполнения сценария, такие как системные вызовы с использованием system (), потоковые операции, запросы к базе данных и т. Д., Не учитывается при определении максимального времени, в течение которого сценарий был запущен. Это не так в Windows, где измеренное время является реальным.
Вероятно, вы попадаете в потоковые операции при использовании file_get_contents.
Попробуйте:
while (1) { ;; }
Согласно Руководство по PHP если safe_mode включен, set_time_limit () не будет иметь никакого эффекта.