Является ли ini set ('max execution time', 0) плохой идеей?
есть ли веская причина не устанавливать переменную конфигурации PHP max_execution_time
к 0?
сотрудник недавно внес изменения в файл, который добавил:
ini_set('max_execution_time', 0);
значение по умолчанию было слишком низким для страницы, которая выполняла сложную обработку перед возвратом вывода пользователю.
в руководстве указано, что основной целью настройки является:
предотвратить плохо написанные сценарии от связывания сервер.
но также продолжает утверждать:
ваш веб-сервер может иметь другие конфигурации тайм-аута, которые также могут прерывать выполнение PHP. Apache имеет автоотключение директива и IIS имеет функцию таймаута CGI. Оба по умолчанию 300 секунд. Подробные сведения см. В документации по веб-серверу.
мы работаем под Apache, так что автоотключение параметр применяется. Есть ли причина не устанавливать max_execution_time
к нулю в глобальном масштабе? Мне в основном любопытно, есть ли преимущества, которые я упускаю, когда не установка его на ноль.
2 ответа:
рискуя вас раздражать;
вы задаете неправильный вопрос. Вам не нужна причина, чтобы не отклоняться от значений по умолчанию, но наоборот. Вам нужна причина, чтобы сделать это. Тайм-ауты абсолютно необходимы при запуске веб-сервера, и отключить этот параметр без причины по своей сути противоречит хорошей практике, даже если он работает на веб-сервере, который имеет собственную директиву тайм-аута.
теперь, что касается реального ответа; вероятно, это в данном конкретном случае это не имеет никакого значения, но это плохая практика, чтобы идти путем установки отдельной системы. Что делать, если скрипт позже запускается на другом сервере с другим таймаутом? Если вы можете смело сказать, что этого никогда не произойдет, прекрасно, но хорошая практика в основном заключается в учете кажущихся маловероятными событий и не связывая излишне настройки и функциональность совершенно разных систем. Отказ от таких принципов несет в себе много бессмысленного несовместимости в мире программного обеспечения. Почти каждый раз они бывают непредвиденными.
Что делать, если веб-сервер позже настроен на запуск какой-либо другой среды выполнения, которая наследует только параметр тайм-аута от веб-сервера? Предположим, например, что вам позже понадобится 15-летняя программа CGI, написанная на C++ кем-то, кто переехал на другой континент, который понятия не имеет о каком-либо таймауте, кроме веб-сервера. это может привести к необходимости изменения таймаута и потому что PHP бессмысленно полагаться на тайм-аут веб-сервера вместо своего собственного, Что может вызвать проблемы для PHP-скрипта. Или наоборот, по какой-то причине вам нужен меньший тайм-аут веб-сервера, но PHP все равно должен иметь его выше.
это просто не очень хорошая идея, чтобы привязать функциональность PHP к веб-серверу, потому что веб-сервер и PHP отвечают за разные роли и должны быть сохранены как можно функциональнее отдельно. Когда стороне PHP требуется больше времени на обработку, она должен быть параметр в PHP просто потому, что он имеет отношение к PHP, а не обязательно ко всему остальному на веб-сервере.
короче говоря, это просто излишне смешивать вопрос, когда в этом нет необходимости.
и последнее, но не менее важное: "stillstanding" правильно; вы должны, по крайней мере, использовать
set_time_limit()
чемini_set()
.надеюсь, это не было слишком покровительственным и раздражающим. Как я уже сказал, Возможно, это нормально при ваших конкретных обстоятельствах, но это хорошая практика, чтобы не предположим, что ваши обстоятельства являются единственными истинными обстоятельствами. Вот и все. :)
причина в том, чтобы иметь какое-то значение, отличное от нуля. Общая практика, чтобы она была короткой глобально и долго для длинных рабочих сценариев, таких как Парсеры, искатели, дамперы, экспорт и импорт сценариев и т. д.
- вы можете остановить сервер, повредить работу других людей по памяти потребляя сценарий, даже не зная об этом.
- вы не будете видеть ошибок где-то, скажем, бесконечный цикл произошел, и его будет сложнее диагностировать.
- такой сайт может быть легко дозируется одним пользователем, при запросе страниц с длительным временем выполнения