2013-03-12 58 views
1

这是对one I asked a few days ago的后续问题,最终设法解决我自己。虽然我很高兴找到潜在的问题,但这个问题仅表现在一个(三个)环境中的事实看起来很奇怪。托管环境之间的HTTP重定向行为不一致

该问题与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版本之间的怪癖,或者真的。我对任何人的理论都感兴趣,为什么事情会按照他们的方式行事。

+0

如何在机器之间移动文件? – Raffaele 2013-03-12 17:26:12

+0

我们有一个颠覆回购 – theraccoonbear 2013-03-12 18:08:51

回答

3

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

但它的工作在其他服务器上!?

如果您以前没有收到标题警告,那么php.ini设置 已更改。然后在其他 服务器上启用输出缓冲,但不在当前。请参阅前一节。

+0

所有服务器的错误报告,我没有得到任何错误消息。我了解“头已发送”位,但为什么重定向在任何地方工作?他们不应该都在空白页上失败了吗?对不起,如果我在你的答案中遗漏了某些东西 – theraccoonbear 2013-03-12 18:12:21

+0

对不起,刚刚重读了关于输出缓冲的部分,实际上是配置的区别。感谢你的回答! – theraccoonbear 2013-03-12 18:17:44

+0

Np - 很高兴帮助! – Dave 2013-03-12 21:18:18