500服务器错误:脚本标头过早结束:

时间:2010-12-02 15:41:53

标签: php apache codeigniter

我在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。我已经看到它在网站的其他页面上发生过一次或两次,但它是在索引期间发生的。

有什么想法吗?

8 个答案:

答案 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的可能性有一个很好的列表;

  
      
  1. 升级或降级到不同版本的PHP可以在httpd.conf中留下剩余选项。在命令行中使用php -v检查当前版本的PHP,并在httpd.conf中搜索提及另一个版本的任何行。如果找到它们,请将它们注释掉,提取httpd.conf并重新启动apache。

  2.   
  3. 如果脚本因资源限制而被终止,httpd.conf中的RLimitCPU和RLimitMEM指令也可能导致错误。

  4.   
  5. suEXEC,mod_perl或其他第三方模块中的配置问题通常会干扰脚本的执行并导致错误。如果这些是原因,则可以在apache error_log中找到与详细信息相关的其他信息。

  6.   
  7. 如果suphp的日志大小达到2GB或更大,您可能会看到脚本标头的过早结束错误。查看日志包含的内容并将其gzip或null。重新启动apache,然后处理suphp日志带来的任何问题。 suphp日志位于:/ usr / local / apache / logs / suphp_log

  8.   
  9. 脚本的权限也可能导致此错误。 CGI脚本只能访问httpd.conf中指定的用户和组所允许的资源。在这种情况下,错误可能只是指出未经授权的用户正在尝试访问脚本。

  10.   

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)

它也可以因为以错误的方式使用PHP APC Extension。 所以首先从php.ini中删除apc.so,重新启动apache并再次测试:)

答案 4 :(得分:0)

php中你的error_level是什么?您在日志中获得的错误消息通常是由于简单的PHP错误导致的,但出于安全原因,服务器设置为不向客户端传递错误消息。通过这个消息不是很有帮助,它可能是一切。

答案 5 :(得分:0)

我遇到了这个问题,经过5个多小时的挣扎,我禁用了xcache,一切恢复正常,错误消失了!

答案 6 :(得分:-3)

你忘了在响应中添加内容类型标头,这是在apache2上托管时必须具有http标头

header('Content-Type: text/html');

答案 7 :(得分:-5)

我遇到了同样的问题,只需重新启动apache服务器就行了

相关问题