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

Posted

技术标签:

【中文标题】500 服务器错误:脚本头过早结束:【英文标题】:500 Server error: Premature end of script headers: 【发布时间】:2011-05-19 05:11:09 【问题描述】:

我有一个 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。我曾经在网站的其他页面上看到过这种情况发生过一两次,但它是在索引编制期间。

有什么想法吗?

【问题讨论】:

没有足够的信息可以说明。如果它适用于您的测试环境,我会怀疑文件权限:apache 服务器是否以不同的用户身份运行? 所以,让脚本每隔几行写入一次日志信息,这样你就可以知道它在哪里中断了。 Colin Fine :我不认为它来自用户,我使用 suphp 运行 php,每个服务器都被分隔 WhatIsOpenID :不,它不是 500 个不同的错误,它是 apache 返回一个“500 内部服务器错误”代码 如果你用suphp运行,也许你应该寻找里面的suphp.log 【参考方案1】:

我也遇到了同样的问题,重启apache服务器就可以了

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

在尝试加载网站时出现 500 内部服务器错误后,我也在 etc/httpd/logs/error_log 中收到了此错误消息。

对我来说,解决方案是权限 - 必须 chmod 755 文件。我将该文件创建为比在服务器上“加载”站点的用户具有更高访问级别的用户。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

false:运行此脚本<?php ?>,您将得到一个没有此类错误消息的空白页面。【参考方案6】:

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。

【讨论】:

【参考方案7】:

此错误通常(有时)由 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>

您可以根据需要增加它,然后在重新索引过程完成后恢复原始值。

【讨论】:

我对 apache 配置和所有这些东西并不完全熟悉。 suphp 被认为是 fastCGI 吗?是否适用相同的规则?如果是,我会尝试你的解决方案,因为我认为这也是一个超时问题 我从未使用过 suphp。无论如何,您可以尝试使用一个简单的 php 脚本,例如,睡眠时间超过 100 秒。如果你遇到同样的错误,那么你可以试试我的解决方案。【参考方案8】:

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

【讨论】:

错误级别设置为 display_errors on 并抛出所有错误,作为补充,我有一个日志系统,可以对任何错误进行完整的调试包跟踪并将其存储在数据库中。所以这边什么都没有。

以上是关于500 服务器错误:脚本头过早结束:的主要内容,如果未能解决你的问题,请参考以下文章

Django,apache,mod_wsgi - 错误:脚本头过早结束

脚本头过早结束:在基本 python 脚本中

Python CGI 脚本错误:头文件前的脚本输出结束

有人遇到这个错误吗? RTMP 流式视频过早结束 3-4 秒?

腐败的表格数据:过早结束

mod_fcgid:在45秒内读取数据超时和脚本标题的过早结束:index.php