【问题标题】:Difference between ob_get_clean and ob_get_flushob_get_clean 和 ob_get_flush 的区别
【发布时间】:2011-11-14 20:04:16
【问题描述】:

它们似乎都在做同样的事情:将输出缓冲区内容返回给您,然后将其删除。

我应该使用哪一个?

【问题讨论】:

  • 撤回我的反对票,因为我也对手册中的描述感到困惑(目前尚不清楚“flush”是否意味着“输出”,我认为确实如此)
  • 耐心,年轻的padawan!它只是6分钟和10页浏览量。 span>
  • 我认为视图计数不起作用,因为我刷新了 10 次
  • @EEka:这个系统并不幼稚——记住它知道你是谁:-)
  • @Pekka 是的,在 php 输出缓冲的上下文中,flushing 表示实际发送数据。

标签: php output-buffering


【解决方案1】:

ob_get_clean() 删除缓冲区(不打印),并返回其内容。

ob_get_flush() 打印缓冲区,将其删除,然后返回其内容。

这两个函数都会终止缓冲区。

【讨论】:

【解决方案2】:

ob_get_clean 只会返回缓冲区的内容并将其分配给您想要的任何变量,但它不会输出任何内容。

另一方面,ob_get_flush 执行 ob_get_clean 所做的一切,但它也输出内容。

【讨论】:

    【解决方案3】:

    这两个函数都清除输出缓冲区,关闭输出缓冲,并返回之前的缓冲区值。

    但是,ob_get_flush 首先将当前缓冲区发送给客户端,而ob_get_clean 只是将其丢弃。

    【讨论】:

    • -1 表示 ob_get_clean “不会更改缓冲选项”。这是不正确的——两者实际上都关闭了缓冲。来自 ob_get_clean 的手册页“返回输出缓冲区的内容并结束输出缓冲”。也不是很清楚地说它丢弃了缓冲区。它没有 - 它像其他答案所说的那样返回它。 Discards 对我来说意味着它会完全丢弃它。
    • @Adam 很好,重写了答案。 Discard 和 flush 是网络级别的术语,但新版本应该澄清这一点。
    【解决方案4】:

    直接尝试回答您的问题:

    如果您希望在刷新缓冲区后再次开始输出缓冲,请使用 ob_get_clean,因为输出缓冲仍然准备就绪而无需重新打开。 (请记住,这只能在没有文本的情况下使用,即使是空格也会回显到浏览器)。 因此,对于更一般的用途,我所有的编程书籍都偏向 ob_get_flush (因为大多数脚本只有一个缓冲区)

    【讨论】:

    • ob_get_clean 结束输出缓冲。您需要重新打开它。
    • 这不是上面指出的正确答案。在下面查看 arnaud576875 的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2011-10-20
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多