Подтвердить что ты не робот

Является ли ini_set ('max_execution_time', 0) плохой идеей?

Есть ли веская причина не устанавливать переменную конфигурации PHP max_execution_time в 0?

Сотрудник недавно проверил изменения в файле, который добавил:

ini_set('max_execution_time', 0);

Значение по умолчанию было слишком низким для страницы, которая выполняла некоторую сложную обработку перед возвратом вывода пользователю.

В руководстве указано, что основная цель настройки:

предотвратить плохо написанные скрипты от привязки сервера.

Но также говорится:

Ваш веб-сервер может иметь другие конфигурации тайм-аутов, которые также могут прерывать выполнение PHP. У Apache есть директива Timeout, а IIS - функция тайм-аута CGI. Оба по умолчанию - 300 секунд. Для получения подробной информации см. Документацию к веб-серверу.

Мы работаем под Apache, поэтому применяется параметр Timeout. Есть ли причина не устанавливать max_execution_time в нуль глобально? Мне в основном любопытно, есть ли преимущества, которые я пропускаю, когда не устанавливает его на ноль.

4b9b3361

Ответ 1

рискуя вас раздражать;

Вы задаете неправильный вопрос. Вам не нужна причина, чтобы не отклоняться от значений по умолчанию, но наоборот. Вам нужно повод для этого. Тайм-ауты абсолютно необходимы при запуске веб-сервера и отключении этого параметра без причины, по сути, противоречат хорошей практике, даже если он работает на веб-сервере, который имеет собственную директиву тайм-аута.

Теперь, что касается реального ответа; вероятно, это вообще не имеет значения в данном конкретном случае, но плохой практикой является настройка отдельной системы. Что делать, если script будет запущен на другом сервере с другим таймаутом? Если вы можете с уверенностью сказать, что этого никогда не будет, хорошо, но хорошая практика во многом связана с учетом кажущихся маловероятными событий и не лишним образом связывать настройки и функциональность совершенно разных систем. Увольнение таких принципов несет ответственность за множество бессмысленных несовместимостей в мире программного обеспечения. Почти каждый раз они непредвиденны.

Что делать, если веб-сервер позже настроен на запуск другой среды выполнения, которая только наследует параметр таймаута с веб-сервера? Скажем, например, что вам понадобится 15-летняя программа CGI, написанная на С++ кем-то, кто переехал на другой континент, который не знает ни одного тайм-аута, кроме веб-сервера. Это может привести к изменению тайм-аута и потому, что PHP бесцельно полагается на тайм-аут веб-сервера, а не собственный, что может вызвать проблемы для PHP script. Или наоборот, вам нужно меньше тайм-аута веб-сервера по какой-то причине, но PHP все равно должен иметь его выше.

Просто не стоит связывать функции PHP с веб-сервером, потому что веб-сервер и PHP несут ответственность за разные роли и должны быть максимально функциональными. Когда стороне PHP требуется больше времени обработки, она должна быть настройкой на PHP просто потому, что она имеет отношение к PHP, а не обязательно все остальное на веб-сервере.

Короче говоря, это просто излишне объединяет вопрос, когда нет необходимости.

И последнее, но не менее важное: "по-прежнему" верно; вы должны хотя бы использовать set_time_limit(), чем ini_set().

Надеюсь, это не слишком покровительственно и раздражало. Как я уже сказал, возможно, это хорошо в соответствии с вашими конкретными обстоятельствами, но это хорошая практика, чтобы ваши предположения не считались Единым истинным Обстоятельством. Все это.:)

Ответ 2

Причина состоит в том, чтобы иметь некоторое значение, отличное от нуля. Общая практика заключается в том, чтобы сделать ее короткой в ​​глобальном масштабе и долгой для длинных рабочих скриптов, таких как парсеры, сканеры, самосвалы, экспорт и импорт скриптов и т.д.

  • Вы можете остановить сервер, повредить работу других людей по памяти потребляя script, даже не зная об этом.
  • Вы не увидите ошибок где-то, скажем, бесконечный цикл, и его будет сложнее диагностировать.
  • Такой сайт может быть легко DoSed одним пользователем при запросе страниц с большим временем выполнения