【问题标题】:"End of script output before headers" in Apache + PHPApache + PHP中的“标题前脚本输出结束”
【发布时间】:2020-10-26 23:04:19
【问题描述】:

更新: 此问题是由于在脚本完成之前服务器请求超时造成的。*

我在共享 LAMP 主机 (nearlyfreespeech.net) 上运行旧代码,最近我添加了一个拒绝在生产环境中运行的新脚本。

我的 apache 错误日志显示消息 End of script output before headers: switch.php,当我尝试使用 Web 客户端触发脚本时,我得到了 500 个状态。

根据其他 StackOverflow 帖子,此错误消息通常是由于文件权限错误。但是,新脚本的文件权限与其他所有脚本相同。

以下是相关的文件权限:

-rw-rw-r--   1 235430  235430  1655 Jul  6 18:05 switch.php

drwxrwxr-x   2 235430  235430    18 Jul  1 21:05 auth/
-rw-rw-r--  1 235430  235430     13 Aug 24  2015 auth/.htaccess
-rw-rw-r--  1 235430  235430    280 Jul  1 21:05 auth/cloudsaves.2.php
-rw-rw-r--  1 235430  235430    880 Aug 28  2015 auth/cloudsaves.php
-rw-r--r--  1 235430  web     15580 Jul  1 21:05 auth/rumpus_migration.php

有了这些include() 继承:

  • switch.php -> auth/cloudsaves.php(工作)
  • switch.php -> auth/cloudsaves.2.php <- auth/rumpus_migration.php(不起作用)

所有请求都针对switch.php,并包含一个参数值,导致包含auth/cloudsaves.phpauth/cloudsaves.2.php

在我的本地测试环境中,一切正常。在生产中,当我使用导致switch.php 包含cloudsaves.2.php 脚本的参数时出现错误。

我尝试更改rumpus_migration.phpcloudsaves.2.php 的组和权限,以完全匹配父switch.php 脚本正确包含的其他文件,结果始终相同。这个新脚本 (cloudsaves.2.php) 是 switch.php 包含的唯一一个本身 includes 另一个脚本的脚本。

我不熟悉 Apache 或 PHP,生产代码位于共享主机上,我的管理员访问权限非常有限。代码在本地运行但不能在生产中运行的事实使得权限问题似乎是罪魁祸首,但我不知道如何继续前进,因为似乎没有工作权限选项可以解决它。

【问题讨论】:

  • 尝试用虚拟文件替换cloudsaves.2.php,看看问题是否仍然存在,排除是代码问题的可能性。
  • @MarkusAO 谢谢,我刚刚完成了这个并确认这是一个代码问题。很快就会发布答案。
  • 我只想补充一点,我在使用虚拟 PHP 脚本在新的操作系统和 Apache 安装上测试我的 CGI 配置时遇到了同样的错误。该脚本具有正确的权限,但我仍然在日志中收到非描述性 End of script output before headers 错误。事后看来,问题最终变得非常明显:php 尚未安装在这台新机器上。重点是,不要忽视显而易见的步骤。

标签: php apache cgi file-permissions


【解决方案1】:

问题是由于长时间运行的数据库查询,请求在脚本完成之前超时。

所以一般的End of script output before headers 错误可能是由服务器超时以及文件权限问题引起的。

【讨论】:

  • 感谢您的跟进,很高兴您将其整理好。
猜你喜欢
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2013-12-01
  • 2014-08-05
  • 2019-04-23
相关资源
最近更新 更多