У меня есть сценарий php, который вызывает внешнюю команду с помощью exec, который компилирует результат запроса пространственной базы данных в файл формы. В таблицах с большим количеством записей (например, 15 000) эта команда может занять до 7 минут. Скрипт отлично работает на сценариях, которые не занимают слишком много времени (возможно, <2 мин.), Но на более длинных сценариях (например, 7 минут) на странице будет отображаться «500 внутренних ошибок сервера». При рассмотрении журнала сервера Apache в этой ошибке указывается: «Преждевременный конец заголовков скриптов: php-cgi.exe». Я уже скорректировал максимальное время выполнения php, чтобы позволить более чем достаточно времени, поэтому я знаю, что это не так. Есть ли максимум Apache, который попал, или что-то еще?
Преждевременный конец заголовков скриптов означает, что тайм-аут веб-сервера для сценариев CGI был превышен вашим скриптом. Это тайм-аут веб-сервера, и он не имеет ничего общего с конфигурацией php.ini. Вам нужно посмотреть конфигурацию обработчика CGI, чтобы увеличить время, разрешенное для сценариев CGI.
Например, если вы используете mod_fastcgi, вы можете указать следующий параметр в своей конфигурации Apache: FastCgiServer -idle-timeout 600
который даст вам время ожидания 10 минут. По умолчанию fastcgi обеспечивает 30 секунд. Вы можете найти некоторые другие параметры fastcgi здесь: http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
По-видимому, файл httpd.conf по умолчанию, включенный в Apache 2.4, автоматически не включает дополнительный файл httpd-default.conf под / conf / extra (возможно, по дизайну), который включает в себя параметр таймаута. Поскольку параметр таймаута не определен, он возвращается к значению по умолчанию 30 секунд, а ваш скрипт (ы) отключается.
Я решил сделать следующее:
Включить conf / extra / httpd-default.conf
Альтернативой было бы просто добавить следующие строки в файл httpd.conf :
Таймаут 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Надеюсь, это поможет кому-то там 🙂