我在php中有一个基于CodeIgniter的solr索引服务器的网站。
我们获得了很多新内容,因此我们刷新了数据库,并且不得不重新索引内容(大约168,000个元素)。我创建了一个脚本,通过500个切片对内容进行索引 - 当脚本完成时,我们启动下一个索引。
它在我的本地测试环境中完美运行,但在生产中我得到这500个错误:
[Thu Dec 02 ...] [error] [client IP] Premature end of script headers: index.php
我的php.log中没有任何内容,只有返回它的apache error_log。我已经看到它在网站的其他页面上发生过一次或两次,但它是在索引期间发生的。
有什么想法吗?
答案 0 :(得分:24)
此错误通常(有时)由FcgidIOTimeout
directive(旧名称:IPCCommTimeout
)的FastCGI设置引起。
这是IO超时的秒数,默认为40秒。超时意味着
“FastCGI应用程序必须在这段时间内开始生成响应。根据需要增加此指令,以处理需要相对较长时间响应的应用程序。”
您可以尝试解决此问题,将其放入您的vhost.conf:
<IfModule mod_fcgid.c>
# 5 minutes for IO timeout, default is 40 seconds
FcgidIOTimeout 300
</IfModule>
您可以根据需要增加它,然后在重建索引过程完成后恢复原始值。
答案 1 :(得分:4)
关于Liquid Web的KB的可能性有一个很好的列表;
升级或降级到不同版本的PHP可以在httpd.conf中留下剩余选项。在命令行中使用php -v检查当前版本的PHP,并在httpd.conf中搜索提及另一个版本的任何行。如果找到它们,请将它们注释掉,提取httpd.conf并重新启动apache。
如果脚本因资源限制而被终止,httpd.conf中的RLimitCPU和RLimitMEM指令也可能导致错误。
suEXEC,mod_perl或其他第三方模块中的配置问题通常会干扰脚本的执行并导致错误。如果这些是原因,则可以在apache error_log中找到与详细信息相关的其他信息。
如果suphp的日志大小达到2GB或更大,您可能会看到脚本标头的过早结束错误。查看日志包含的内容并将其gzip或null。重新启动apache,然后处理suphp日志带来的任何问题。 suphp日志位于:/ usr / local / apache / logs / suphp_log
- 醇>
脚本的权限也可能导致此错误。 CGI脚本只能访问httpd.conf中指定的用户和组所允许的资源。在这种情况下,错误可能只是指出未经授权的用户正在尝试访问脚本。
http://www.liquidweb.com/kb/apache-error-premature-end-of-script-headers/
如果我处于相同的情况,我先检查权限,然后继续3和4。
答案 2 :(得分:2)
在尝试加载网站时出现500内部服务器错误后,我在etc / httpd / logs / error_log中也收到此错误消息。
对我来说,解决方案是权限 - 必须chmod 755该文件。我创建的文件是一个访问级别高的用户,而不是“加载”服务器上的站点。
答案 3 :(得分:1)
答案 4 :(得分:0)
php中你的error_level是什么?您在日志中获得的错误消息通常是由于简单的PHP错误导致的,但出于安全原因,服务器设置为不向客户端传递错误消息。通过这个消息不是很有帮助,它可能是一切。
答案 5 :(得分:0)
我遇到了这个问题,经过5个多小时的挣扎,我禁用了xcache,一切恢复正常,错误消失了!
答案 6 :(得分:-3)
你忘了在响应中添加内容类型标头,这是在apache2上托管时必须具有http标头
header('Content-Type: text/html');
答案 7 :(得分:-5)
我遇到了同样的问题,只需重新启动apache服务器就行了