输出缓冲不起作用吗?

时间:2017-04-30 07:11:19

标签: php flush output-buffering

(我将output_buffering和implicit_flush设置为Off。)

我知道PHP有自己的输出缓冲。 (不输出以ob_start()开头的缓冲

<?php
echo 'hello';
header('HTTP/1.1 200 OK');
echo 'hello';
?>

所以我希望上面的源代码能正常工作,因为输出缓冲除非我调用flsuh()。

但是,会发出警告。 (警告:无法修改标题信息 - 已经发送的标题)

我不知道为什么。如果我误解了,我希望你让我知道。

1 个答案:

答案 0 :(得分:1)

在设置标题之前,您无法输出任何内容。

无论php.ini设置如何,在进行任何输出之前,必须调用发送或修改HTTP标头的函数。

这就是为什么有时<?php之前或之后的无意空格,?>会导致抛出此错误。

在任何请求中,首先发送标头然后输出。您正在有效地输出,然后发送/修改标题,然后再次输出。

在第一次调用任何输出时,PHP将刷新标头缓冲区,这意味着它们已经设置好,因此尝试更改它们是不可能的;这就是错误发生的原因。