Назад | Перейти на главную страницу

Предотвращение тайм-аута CGI в Apache с помощью PHP

У меня есть PHP-процесс, который пользователь запускает в браузере, но обычно занимает довольно много времени - более 5 минут. Мы только что переключились на новый сервер, и когда мы пытаемся запустить скрипт сейчас, он постоянно выходит из строя ровно через 4 минуты, отправляя на страницу 500 Internal Server Error и выводя следующие ошибки в журнал ошибок:

Тайм-аут ожидания вывода из сценария CGI

Преждевременное завершение заголовков скрипта: cgi_wrapper

Интересно то, что процесс PHP, похоже, завершается в фоновом режиме. Если мы выйдем со страницы ошибки 500 и немного подождем, желаемые изменения в скрипте все же будут внесены.

Есть ли способ снять этот предел CGI, который, кажется, был наложен на нас? Я читал о FastCGI, но не знаю, как установить его на нашем сервере (Apache, CentOS, PHP 5.3).

Это не способ решить проблему - HTTP не предназначен для обработки операций, занимающих очень много времени - хотя похоже, что ваша текущая конфигурация PHP позволяет программе работать в течение длительного времени, это означает, что вы неправильно ее настроили - это должен знать, когда веб-сервер разрывает соединение, и отвечать соответствующим образом. Возможно, удастся подделать конфигурацию веб-сервера и даже заставить браузер оставаться на связи достаточно долго, и, возможно, вам не нужно беспокоиться о промежуточных прокси-серверах - но вы используете каждый из инструментов так, как они не были предназначены для использования.

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