1

我习惯了在输出开始后无法发送标头。事实上,我指望它。

在我正在处理的应用程序中,每次成功更新或插入查询后,页面都会通过header('Location: ...')调用重新加载。那是因为我不希望带有 POST 数据的页面可以刷新。

但是在开发过程中,其中一个查询可能只是有一个错误 - 然后我打印出一些调试信息(带有echo)。这将阻止页面重新加载 - 但自从我升级到 php 5.4 后,它只是重新加载。如果我exit;在打印调试信息之后只能读取调试信息 - 我不喜欢,因为脚本后面可能会出现更多调试信息。

如果我签headers_sent()入其中一个回显调用,则表示尚未发送标头。所以看起来它在没有我(故意)打开它的情况下被缓冲。

它当然可能是一个 php.ini 设置,而不是我现在使用 5.4 版的事实,但我找不到它。

有人有想法吗?

4

2 回答 2

1

使用输出缓冲来解决这个问题。基本上你需要做的就是尽快打电话ob_start();。然后,PHP 不会立即发送内容,而是缓冲输出。因此,您首先设置的内容(正文或标题)并不重要。它们将被设置在缓冲区中,因此除非发送缓冲区,否则操作不是问题。如果您没有明确刷新缓冲区,它将在您的脚本结束时由 PHP 发送。请参阅PHP 手册中的输出缓冲控制一章。

于 2012-09-14T14:27:01.793 回答
1

jeroen answered my question (in a comment on my original question) by pointing me to the output_buffering setting in php.ini. Thank you!

于 2012-09-14T16:11:13.550 回答