1

这是我几天前提出的问题的后续问题,并最终设法解决了自己。虽然我很高兴找到潜在的问题,但问题仅表现在一个(三个)环境中的事实似乎真的很奇怪。

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

基本上,重定向在我的本地(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 kernel 3.2.6、Apache/2.2.22、PHP/5.3.15)上,任何尝试重定向的控制器操作都会导致 HTTP 200 空白页面(而不是预期的HTTP 302 重定向)。

该页面并不是真正的空白,我最终发现在我的一个控制器的开始 PHP 标记之前错误地添加了一个换行符。据我了解,换行符本质上触发了标题输出的结束,因此Location: ...无法写入标题。

一旦发现错误的换行符,它就是一个快速修复,但我想知道为什么我在我的 Mac 或我同事的 Windows 机器上没有看到相同的空白页行为。我不确定这是否是 PHP 或 Apache 版本之间的怪癖,或者真的是什么。我会对任何人关于事物为何如此行事的理论感兴趣。

4

1 回答 1

3

根据此堆栈溢出问题的答案:“如何修复 PHP 中的“标头已发送”错误”:

但它在另一台服务器上工作!?

如果您之前没有收到标题警告,则 php.ini 设置已更改。然后在另一台服务器上启用了输出缓冲,但在当前服务器上未启用。请参阅上一节。

于 2013-03-12T17:33:26.923 回答