这是我几天前问过的一个问题的后续问题,最终我自己解决了。虽然我很高兴发现了潜在的问题,但这个问题只在三种环境中的一种环境中表现出来,这一事实似乎真的很奇怪。
该问题与CakePHP 2.3.0站点上的操作有关,该操作在控制器($this->redirect(...);
)中重定向。
然而,在我们的暂放服务器(Debian GNU/Linux 6.0.6内核3.2.6,Apache/2.2.22, PHP/5.3.15)上,任何试图重定向的控制器动作都会导致HTTP 200空白页(而不是预期的HTTP 302重定向)。
页面不是真正的空白,有一个单独的换行符,我最终发现它是在我的一个控制器的PHP开始标记之前错误地添加的。根据我的理解,换行实际上触发了报头输出的结束,因此无法写入Location: ...
报头。
一旦发现错误的换行符,这是一个快速修复,但我不知道为什么我没有看到相同的空白页行为在我的Mac或我同事的Windows机器。我不确定这是否是PHP或Apache版本之间的怪癖,或者什么,真的。我对任何人关于事物为何如此运行的理论都很感兴趣。
根据这个堆栈溢出问题的答案:"如何修复"Headers已经发送"PHP出错":
但是它在另一个服务器上工作!?
如果你之前没有得到报头警告,那么php.ini设置已经改变了。然后在另一个上启用输出缓冲服务器,但不是在当前。