我遇到了一个让我走入死胡同的问题所以反过来,我转向你!最近一个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
如果选项可用,我们建议您立即禁用脚本的文件锁定(通常位于脚本的配置部分);或使用不使用文件锁定的其他脚本。此脚本未来的任何锁定滥用行为都可能导致此域名的流量暂停,以防止锁定影响其他客户。
如果您对此文件锁定问题有任何疑问,或者不确定从何处开始禁用文件锁定,请回复此票证以获取进一步的帮助。
答案 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