Как избежать тайм-аута CGI - PullRequest
2 голосов
/ 13 октября 2010

У меня есть функция, которая получает большой XML-файл, затем анализирует его, а затем использует детали, чтобы получить еще несколько XML-файлов, которые снова анализируются (интернет-магазин).

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

Есть ли способ обойти это?

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

Вот сообщения об ошибках:

[Wed Oct 13 10:34:41 2010] [warn] [client 213.175.111.200] Timeout waiting for output from CGI script /home/virtual/site14/fst/var/www/interpreters/php-script
[Wed Oct 13 10:34:41 2010] [error] [client 213.175.111.200] Premature end of script headers: php-script
[Wed Oct 13 10:36:41 2010] [warn] [client 213.175.111.200] Timeout waiting for output from CGI script /home/virtual/site14/fst/var/www/interpreters/php-script

Спасибо!

1 Ответ

4 голосов
/ 13 декабря 2010

Для тех, кто ищет ответ, есть пара вещей, которые вам могут пригодиться:

  1. Установка значения TimeOut на вашем веб-сервере в 0 или что-то довольно большое.В итоге я установил его на 0, так как мне нужно было, чтобы мой скрипт работал, например, навсегда.
  2. Если 1 невозможно из-за использования общего хостинга, ваш наиболее вероятный вариант - периодически возвращать некоторую информацию журнала.Я должен предупредить вас, чтобы этот код не превращался в функцию, поскольку невозможно постоянно возвращать функцию.Вы можете сделать часть кода функцией, но, в конце концов, функция Good old echo сделает это за вас
  3. Вы можете попробовать некоторые подходы Comet, но они довольно сложные, и, скорее всего,не решит всех проблем.

PS Я несколько обошел свою проблему, используя перенаправления javascript, которые были проблемой в *, поэтому я не рекомендую никому делать это так же.

...