Могу ли я увеличить директиву Apache TimeOut для конкретного скрипта PHP?

У меня есть PHP-скрипт, который будет выполняться по запросу администраторов приложения. Он выполняет много работы и занимает не менее 20 минут (в зависимости от размера базы данных).

директива Apache TimeOut установлена ​​на 300 (5 минут), что закрывает соединение и возвращает код состояния 500 после завершения моего PHP-скрипта, если для выполнения требуется больше времени

Могу ли я увеличить директиву Apache TimeOut для конкретного скрипта 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?

Возможный дубликат Как увеличить директиву тайм-аута apache в .htaccess?

rkosegi 02.04.2018 16:01

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

Accountant م 02.04.2018 16:07

Директиву тайм-аута нельзя настроить в .htaccess. Его область действия - конфигурация сервера и конфигурация виртуального хоста (httpd.apache.org/docs/2.4/mod/core.html#timeout). Также ошибка, которую вы получаете, может не быть связана с директивой Timeout. Опубликуйте содержимое файла журнала ошибок Apache

Nadir Latif 04.04.2018 06:14

@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/ba‌​ckups

Accountant م 04.04.2018 10:34

Можете ли вы попробовать включить отчет об ошибках в вашем php скрипте. Вы можете сделать это, добавив строки: error_reporting (E_ALL); ini_set ("display_errors", '1'); в начало вашего php скрипта

Nadir Latif 05.04.2018 08:57

@NadirLaif, если отчет об ошибках PHP уже включен.

Accountant م 05.04.2018 10:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
6
2 324
1

Ответы 1

Вы пробовали метод PHP set_time_limit ()?

https://www.php.net/manual/en/function.set-time-limit.php

Помимо установки начального времени выполнения, в руководстве говорится, что его вызов сбрасывает время, затраченное на ноль при вызове, и снова запускает счетчик до предоставленного предела.

Поэтому, если вы хотите быть уверенным, вы можете просто регулярно вызывать set_time_limit (0) (0 == no limit) на протяжении всего сценария, чтобы убедиться, что вы никогда не достигнете предела (даже если вы устанавливаете бесконечный предел с помощью переходя в 0).

Спасибо за ваше время, я вернусь к вам, когда попробую, просто дайте мне немного времени, потому что я сейчас мало использую PHP.

Accountant م 20.01.2020 06:21

Другие вопросы по теме