托管环境之间的HTTP重定向行为不一致

时间:2013-03-12 17:10:54

标签: php http cakephp redirect http-headers

这是对one I asked a few days ago的跟进问题,并最终成功解决了自己。虽然我很高兴找到潜在的问题,但这个问题只出现在一个(三个)环境中的事实看起来很奇怪。

问题与在控制器中重定向的CakePHP 2.3.0站点上的操作有关($this->redirect(...);)。

基本上,重定向在我的本地(Mac OS X / 10.6.8,Apache / 2.2.17,PHP / 5.3.4)开发机器以及我的同事(Windows 7,Apache / 2.4.2,PHP)上运行良好/5.4.3)。 “添加”操作将记录插入数据库,然后重定向到“索引”操作。用户登录工作正常。没问题,一切看起来都很正确。

但是,在我们的登台服务器(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版本之间的怪癖,还是真的。我会对任何人关于事情表现如何的理论感兴趣。

1 个答案:

答案 0 :(得分:3)

根据这个堆栈溢出问题的答案:“How to fix "Headers already sent" error in PHP”:

  

但它可以在其他服务器上运行!

     

如果之前没有收到标题警告,那么php.ini设置   已经变了。然后在另一个上启用输出缓冲   服务器,但不是当前的。见上一节。