Преждевременное завершение заголовков скриптов: php5 Symfony выдает внутреннюю ошибку сервера 500 - PullRequest
3 голосов
/ 29 августа 2010

Я сталкиваюсь с проблемой, которая ставит меня в тупик, поэтому, в свою очередь, я обращаюсь к вам! Недавно приложение Symfony закрывалось, отображая внутреннюю ошибку apache -500. После удаления кеша Symfony сайт возвращается. После дальнейших исследований я обнаружил ошибку «Преждевременный конец заголовков скриптов: php5». Сайт не выдавал подобных ошибок в течение более 1 года, и мы не вносили никаких изменений в этот сайт, и это происходит регулярно (один раз в неделю). Следующее из файлов журнала.

[Sat Aug 28 06:20:30 2010] [error] [client 206.131.184.1] Premature end of script headers: php5

Это письмо также недавно было отправлено с МТ, возможно, связано с тем, что, как мне кажется, может иметь прямое отношение к проблеме.

Нам стало известно, что ваш сервис ----.com генерирует необычно большое количество блокировок файловой системы в кластере, в котором находится ваша учетная запись. Веб-сайты или сценарии, которые неправильно используют блокировку файлов NFS, часто могут генерировать эту ошибку, которая чрезмерно влияет на производительность кластера для других клиентов. Это нарушение нашего AUP, которое можно найти по адресу http://mediatemple.net/company/legal/aup_general.php'.

Мы отслеживали проблему блокировки файлов для следующего файла, который постоянно блокируется:

/ доменов / ----. Ком / Symfony / кэш / интерфейс / прод / конфигурация / маршрутизация / symfony.routing.configuration.cache /domains/----.com/symfony/cache/frontend/prod/config/routing/symfony.routing.data.cache

Мы рекомендуем немедленно отключить блокировку файлов для ваших скриптов, если опция доступна (часто находится в разделе конфигурации скрипта); или используйте другой скрипт, который не использует блокировку файла. Любое злоупотребление этим сценарием в будущем может привести к приостановке трафика на этот домен, чтобы блокировка не влияла на других клиентов.

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

Ответы [ 3 ]

11 голосов
/ 20 июня 2013

Это происходит, только если вы просматриваете с помощью Google Chrome и выдается исключение. Там, где некоторые изменения в Monolog, они включили "Chromephp".

В вашем config_dev.yml:

monolog:
handlers:
    main:
        type:  stream
        path:  %kernel.logs_dir%/%kernel.environment%.log
        level: debug
    firephp:
        type:  firephp
        level: info
    chromephp:
        type:  chromephp
        level: info

Удалите весь блок Chromephp и все в порядке.

2 голосов
/ 29 августа 2010

Я думаю, что для вас безопасно отключить блокировку кэша Symfony для операций чтения в lib/cache/sfFileCache.class.php в методе read(). Symfony берет блокировку общего доступа при чтении. Блокировка не нужна, потому что Symfony использует временный файл и переименовывает при записи. Кроме того, в lib/log/sfFileLogger.class.php блокировка в методе doLog() не требуется, поскольку запись является атомарной (одиночный вызов fwrite()), а файл открывается в режиме добавления.

Я не проверял, как эти изменения повлияют на Symfony.

«Преждевременный конец заголовков скриптов» не является сообщением об ошибке PHP. Веб-сервер выдает это сообщение, когда серверная часть (в данном случае PHP) не отправляет заголовки. Это наиболее вероятно, потому что он умирает, прежде чем он сможет что-либо сделать. Вы должны найти журнал ошибок PHP и увидеть реальное сообщение об ошибке. Однако обратите внимание, что Symfony использует большое количество @ для подавления ошибок в вызовах функций, поэтому вы можете ничего не найти.

1 голос
/ 29 августа 2010

Недавно я столкнулся с подобной проблемой. Замена файлового кэширования на APC полностью решила мои проблемы. Мне нужно было заменить sfFileCache для view_cache, i18n cache и маршрутизации.

Если APC недоступен на вашем сервере, вы можете легко использовать любой другой популярный ускоритель.

Как использовать APC с Symfony: http://www.zalas.eu/symfony-meets-apc-alternative-php-cache

...