脚本标头过早结束:php5 Symfony产生内部服务器错误500

时间:2010-08-29 02:01:24

标签: php apache symfony1 mediatemple

我遇到了一个让我走入死胡同的问题所以反过来,我转向你!最近一个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

此电子邮件最近也是从MT发送的,可能与我认为可能与此问题直接相关。

我们注意到,您的服务----.com一直在托管您帐户的群集上生成异常大量的文件系统锁。不正确地利用NFS文件锁定的网站或脚本通常会产生此错误,这会对其他客户的群集性能产生过度影响。这违反了我们的AUP,可以在“http://mediatemple.net/company/legal/aup_general.php”找到。

我们将文件锁定问题跟踪到以下重复锁定的文件:

/域/ ----。com / symfony中/高速缓存/前端/ PROD /配置/路由/ symfony.routing.configuration.cache /域/ ----。com / symfony中/高速缓存/前端/ PROD /配置/路由/ symfony.routing.data.cache

如果选项可用,我们建议您立即禁用脚本的文件锁定(通常位于脚本的配置部分);或使用不使用文件锁定的其他脚本。此脚本未来的任何锁定滥用行为都可能导致此域名的流量暂停,以防止锁定影响其他客户。

如果您对此文件锁定问题有任何疑问,或者不确定从何处开始禁用文件锁定,请回复此票证以获取进一步的帮助。

3 个答案:

答案 0 :(得分:11)

仅当您使用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块并且每件事情都很好。

答案 1 :(得分:2)

我认为在方法lib/cache/sfFileCache.class.php中对read()中的读取禁用Symfony的缓存锁定是安全的。 Symfony在阅读时会占用一个共享锁。锁定不是必需的,因为Symfony使用临时文件并在写入时重命名。此外,在lib/log/sfFileLogger.class.php中,doLog()方法中的锁定不是必需的,因为写入是原子的(单fwrite()调用),并且文件以追加模式打开。

我还没有测试过这些变化会如何影响Symfony。

“脚本标头的过早结束”不是PHP错误消息。当后端(在本例中为PHP)不发送标头时,Web服务器发出此消息。这很可能是因为它在能够做任何事情之前就已经死了。您应该找到PHP错误日志并查看真实的错误消息。但请注意,Symfony在函数调用中使用了大量@来进行错误抑制,因此您可能找不到任何内容。

答案 2 :(得分:1)

最近我遇到了类似的问题。用APC替换文件缓存完全解决了我的问题。我需要为view_cache,i18n缓存和路由替换sfFileCache。

如果您的服务器上没有APC,那么您可以轻松使用任何其他流行的加速器。

如何将APC与symfony一起使用:http://www.zalas.eu/symfony-meets-apc-alternative-php-cache