PHP 5.4:防止在输出后设置标头

时间:2012-09-14 14:15:50

标签: php header outputstream

我习惯在输出开始后无法发送标题。事实上,我依靠它。

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

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

如果我在其中一个回音调用中检查exit;,则表示尚未发送标题。因此,如果没有我(明知而言)将其打开,它看起来就像是在缓冲。

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

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

使用输出缓冲来解决此问题。基本上你需要做的就是尽快打电话给ob_start();。然后,PHP不会立即发送东西,而是缓冲输出。所以你设置的第一个,正文或标题并不重要。它们将被设置在缓冲区中,因此除非发送缓冲区,否则操作不是问题。如果没有显式刷新缓冲区,那么当脚本结束时,它将由PHP发送。请参阅PHP手册中的Output Buffering Control章节。

答案 1 :(得分:1)

jeroen通过指向output_buffering中的php.ini设置回答了我的问题(在我对原始问题的评论中)。谢谢!