【问题标题】:Is output buffering not working?输出缓冲不起作用吗?
【发布时间】:2017-04-30 07:11:19
【问题描述】:

(我将 output_buffering 和implicit_flush 设置为关闭。)

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

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

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

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

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

【问题讨论】:

  • output_buffering 的设置是什么? (当我读到它时,您也将其设置为关闭?我应该打开)
  • 您说:“我知道 PHP 有自己的输出缓冲。”您能告诉我们更多关于您对此的了解吗?你对它的工作原理做出假设,那么你有这些假设的证据吗?

标签: php flush output-buffering


【解决方案1】:

在设置标题之前你不能输出任何东西。

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

这就是为什么有时在&lt;?php?&gt; 之前或之后的 unintentional 空格会导致抛出此错误。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2012-06-03
    相关资源
    最近更新 更多