输出后重定向 HTTP 标头


http header redirect after output

在做我当前的项目时,我发现了一点好奇心。 如果我尝试在任何输出后重定向 URL,它仍然可以正常工作。 但是根据PHP手册,它不应该工作。

error_reporting(-1);
echo "test";
header("Location: http://www.google.com/");

将我重定向到谷歌,没有任何错误。 这有什么问题(我的Apache config ? dunno ...)。 它也适用于饼干等。

我正在使用IE9(也用opera测试过)和Apache/2.2.21。

问候亚历克斯

多亏了Will和pieman的帖子,它发现有一个我无法禁用或偏置的std输出缓冲区。 为了解决这个"问题",我放置了一个

ob_end_clean(); 

我的索引第一行中的语句.php。 我的原始测试代码失败的原因(我期望)。 这确实不好,但有必要。 如果你们中的任何人能提供"更好"的解决方案,我将不胜感激。

问候亚历克斯

根据 Will 和 Ganesh 的评论,您还可以尝试ob_get_status(),看看在echo调用时是否有任何输出缓冲区打开。如果这样做,那么您的echo将被转储到缓冲区中,并且不会立即发送到客户端。然后仍然可以调用header()而不会出错,因为没有发送任何内容。

由于 PHP INI 设置,您的数据在输出之前会被缓冲。这就是为什么它被成功重定向到下一页的原因