У меня есть PHP-скрипт, который будет выполняться по запросу администраторов приложения. Он выполняет много работы и занимает не менее 20 минут (в зависимости от размера базы данных).
директива Apache TimeOut установлена на 300 (5 минут), что закрывает соединение и возвращает код состояния 500 после завершения моего PHP-скрипта, если для выполнения требуется больше времени
Настраивать PHP ini max_execution_time на долгое время для этого скрипта бесполезно.
<?php
// long script
ini_set("max_execution_time", 3600);// 1 hour
// Apache still responses with the same "Connection: close" header and 500 status code
И я не хочу менять всю директиву Apache TimeOut только для этой пары скриптов, потому что, если бы я это сделал, любой запрос мог бы занять очень много времени, что создает область для уязвимостей DDOS, верно?
Есть ли способ разрешить этому скрипту дольше работать только на уровне Apache?
@rkosegi благодарим вас за полезный ответ в ссылке, но, как я уже упоминал, я не могу установить весь тайм-аут сервера на 1 час для любого запроса, я хочу, чтобы этот конкретный скрипт был разрешен для более длительного времени выполнения.
Директиву тайм-аута нельзя настроить в .htaccess. Его область действия - конфигурация сервера и конфигурация виртуального хоста (httpd.apache.org/docs/2.4/mod/core.html#timeout). Также ошибка, которую вы получаете, может не быть связана с директивой Timeout. Опубликуйте содержимое файла журнала ошибок Apache
@NadirLa, если последняя ошибка в журнале ошибок 3 месяца назад [Tue Jan 02 00:47:30.498460 2018] [:error] [pid 25738:tid 139947671492352] [client 46.152.123.254:64211] sh: /home/*********/public_html../temp/2018-01-02_1514854050.sql: No such file or directory, referer: https://*******************************.com/easy/settings/backups
Можете ли вы попробовать включить отчет об ошибках в вашем php скрипте. Вы можете сделать это, добавив строки: error_reporting (E_ALL); ini_set ("display_errors", '1'); в начало вашего php скрипта
@NadirLaif, если отчет об ошибках PHP уже включен.






Вы пробовали метод PHP set_time_limit ()?
https://www.php.net/manual/en/function.set-time-limit.php
Помимо установки начального времени выполнения, в руководстве говорится, что его вызов сбрасывает время, затраченное на ноль при вызове, и снова запускает счетчик до предоставленного предела.
Поэтому, если вы хотите быть уверенным, вы можете просто регулярно вызывать set_time_limit (0) (0 == no limit) на протяжении всего сценария, чтобы убедиться, что вы никогда не достигнете предела (даже если вы устанавливаете бесконечный предел с помощью переходя в 0).
Спасибо за ваше время, я вернусь к вам, когда попробую, просто дайте мне немного времени, потому что я сейчас мало использую PHP.
Возможный дубликат Как увеличить директиву тайм-аута apache в .htaccess?