Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP5.4:防止在输出后设置标题_Php_Header_Outputstream - Fatal编程技术网

PHP5.4:防止在输出后设置标题

PHP5.4:防止在输出后设置标题,php,header,outputstream,Php,Header,Outputstream,我习惯于在输出开始后无法发送标题。事实上,我指望它 在我正在使用的应用程序中,每次成功更新或插入查询后,页面都会重新加载标题('Location:…')调用。这是因为我不希望包含POST数据的页面可以刷新 但是在开发过程中,其中一个查询可能有一个bug,然后我打印出一些调试信息(使用echo)。这样就可以防止页面被重新加载——但自从我升级到PHP5.4之后,它还是会被重新加载。我只能在退出时读取调试信息在打印调试信息之后-我不喜欢,因为脚本后面可能会有更多的调试信息 如果我在其中一个echo调用

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

在我正在使用的应用程序中,每次成功更新或插入查询后,页面都会重新加载
标题('Location:…')
调用。这是因为我不希望包含POST数据的页面可以刷新

但是在开发过程中,其中一个查询可能有一个bug,然后我打印出一些调试信息(使用
echo
)。这样就可以防止页面被重新加载——但自从我升级到PHP5.4之后,它还是会被重新加载。我只能在退出时读取调试信息在打印调试信息之后-我不喜欢,因为脚本后面可能会有更多的调试信息

如果我在其中一个echo调用中选中
headers\u sent()
,它会说headers尚未发送。所以它看起来像是在我(故意)没有打开它的情况下被缓冲的

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


有人有主意吗?

使用输出缓冲来解决这个问题。基本上,您需要做的就是调用
ob_start()尽可能快。然后,PHP将缓冲输出,而不是立即发送内容。因此,您首先设置的内容(正文或标题)实际上并不重要。它们将被设置在缓冲区中,所以除非发送缓冲区,否则操作不是问题。若您并没有显式地刷新缓冲区,它将在脚本结束时由PHP发送。参见PHP手册中的章节。

jeroen回答了我的问题(在对我原始问题的评论中),他将我指向
PHP.ini
中的
output\u buffering
设置。谢谢大家!

您是否尝试过
error\u reporting(E\u ALL)
?您的
php.ini
文件中
output\u buffering
的值是多少?谢谢jeroen-这很愚蠢,但我已经查看了这个值。输出缓冲确实已设置(设置为4096),这会导致调试信息自动保留在缓冲区中,从而允许设置标头。我理解你的建议,但我认为这不是我想要的:我不想要缓冲,但我似乎已经得到了它。事实上,我确实希望
header()
调用由于输出已经启动而失败,这样我就可以看到调试信息。不过这确实是一个输出缓冲问题——感谢jeroen对我的原始问题的评论,我能够发现php自动缓冲输出,因为在php.ini中设置了输出缓冲。