Есть ли способ отключить таймаут чтения для FastCGI? (fastcgi_read_timeout)
Установка его в ноль не работает и вызывает немедленный тайм-аут.
Причина, по которой мне нужно обойти тайм-аут, заключается в том, как отчеты создаются системой, которую мы используем. Поскольку разветвление невозможно в PHP-FPM (pctnl_fork () отключено), обработка отчета выполняется сразу после отправки запроса. Это приводит к зависанию чтения до тех пор, пока обработка не будет завершена системой.
Похоже, ваш единственный вариант - установить fastcgi_read_timeout
к действительно большому значению (например, 1 час или 1 день).
Как я подойду к решению проблемы:
Когда пользователь отправляет запрос на создание отчета, используйте exec("php report.php")
для запуска скрипта генерации отчета в режиме CLI. Разумеется, используйте некоторую идентифицирующую информацию в качестве лекарств.
Загрузите страницу «Подождите» для пользователя, используя AJAX, чтобы проверить, выполнен ли отчет с помощью ps w
. Найдите имя сценария и используемые аргументы.
После этого перейдите на страницу отчета.
Таким образом, вы не позволяете пользователям использовать затор для обновления, если ожидание становится слишком длинным (фактически делая его еще дольше), а также информируете пользователя о том, что процесс все еще выполняется.