exec из php вызывает ошибку «Преждевременный конец заголовков скриптов: php-cgi.exe» - PullRequest
2 голосов
/ 06 июня 2011

У меня написан php-скрипт, который вызывает внешнюю команду, используя exec, которая компилирует пространственный результат запроса к базе данных в файл формы. В таблицах с большим количеством записей (скажем, 15 000) выполнение этой команды может занять до 7 минут. Сценарий отлично работает на сценариях, которые не занимают слишком много времени (возможно, <2 минуты), но на более длинных сценариях (например, 7-минутном) на странице будет отображаться «500 внутренняя ошибка сервера». При просмотре журнала сервера Apache появляется сообщение об ошибке: «Преждевременное завершение заголовков скриптов: php-cgi.exe». Я уже настроил максимальное время выполнения php, чтобы обеспечить более чем достаточно времени, поэтому я знаю, что это не так. Есть ли у Apache максимум или что-то еще? </p>

Ответы [ 2 ]

1 голос
/ 24 июля 2014

Очевидно, что файл httpd.conf по умолчанию, включенный в Apache 2.4, автоматически не включает дополнительный файл httpd-default.conf в / conf / extra (возможно, в соответствии с планом), который включает параметр timeout,Поскольку параметр времени ожидания не определен, он возвращается к значению по умолчанию, равному 30 секундам, и время ожидания вашего сценария (ов) истекло.

Я сделал следующее, чтобы решить его:

  • Открыл httpd.conf и добавил следующую строку внизу:

Включить conf / extra / httpd-default.conf

  • Перезапустил Apache, и он заработал.

В качестве альтернативы можно было бы просто добавить следующие строки в файл httpd.conf :

Тайм-аут 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

Надеюсь, это кому-нибудь поможет:)

1 голос
/ 06 октября 2011

Преждевременное завершение заголовков скриптов означает, что таймаут веб-сервера для скриптов 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...