"End of script output before headers" 在 Apache + PHP
"End of script output before headers" in Apache + PHP
更新: 此问题是由于脚本完成前服务器请求超时造成的。*
我在共享 LAMP 主机 (nearlyfreespeech.net) 上有遗留代码 运行,并且我最近添加了一个拒绝在生产环境中工作的新脚本。
我的 apache 错误日志显示消息 End of script output before headers: switch.php
,当我尝试使用 Web 客户端触发脚本时收到 500 个状态。
根据其他 Whosebug 帖子,此错误消息通常是由于文件权限错误引起的。但是,新脚本的文件权限与所有其他脚本相同。
相关文件权限如下:
-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,并且生产代码位于共享主机上,我的管理员访问权限非常有限。该代码在本地运行但不在生产环境中运行这一事实使得权限问题似乎是一个可能的罪魁祸首,但我不知道如何前进,因为 none 的工作权限选项似乎可以解决它。
问题是请求在脚本完成之前超时,原因是 运行 数据库查询很长。
因此一般性 End of script output before headers
错误可能是由服务器超时和文件权限问题引起的。
更新: 此问题是由于脚本完成前服务器请求超时造成的。*
我在共享 LAMP 主机 (nearlyfreespeech.net) 上有遗留代码 运行,并且我最近添加了一个拒绝在生产环境中工作的新脚本。
我的 apache 错误日志显示消息 End of script output before headers: switch.php
,当我尝试使用 Web 客户端触发脚本时收到 500 个状态。
根据其他 Whosebug 帖子,此错误消息通常是由于文件权限错误引起的。但是,新脚本的文件权限与所有其他脚本相同。
相关文件权限如下:
-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,并且生产代码位于共享主机上,我的管理员访问权限非常有限。该代码在本地运行但不在生产环境中运行这一事实使得权限问题似乎是一个可能的罪魁祸首,但我不知道如何前进,因为 none 的工作权限选项似乎可以解决它。
问题是请求在脚本完成之前超时,原因是 运行 数据库查询很长。
因此一般性 End of script output before headers
错误可能是由服务器超时和文件权限问题引起的。