【发布时间】: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.php 或auth/cloudsaves.2.php。
在我的本地测试环境中,一切正常。在生产中,当我使用导致switch.php 包含cloudsaves.2.php 脚本的参数时出现错误。
我尝试更改rumpus_migration.php 和cloudsaves.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