【问题标题】:whats the difference between ob_flush and ob_end_flush?ob_flush 和 ob_end_flush 有什么区别?
【发布时间】:2011-11-13 09:32:03
【问题描述】:

我对 PHP 函数 ob_flush()ob_end_flush() 感到困惑。 关于函数ob_flush manual

The buffer contents are discarded after ob_flush() is called.This function does not destroy the output buffer like ob_end_flush() does. 

我对这里的discardeddestroyed 感到困惑。即使缓冲区内容在ob_flush() 的情况下被丢弃,它们也无法访问,即使在ob_end_flush() 的情况下它们被销毁,它们也无法访问。 那么这两个函数有什么区别呢?

更新:

回复JamWaffles answer 我不明白 删除缓冲区中的所有内容但保留缓冲区与删除整个缓冲区(释放它)的意义,因为 PHP 没有指针的概念,你不能获取缓冲区的地址,因此无论是保留空缓冲区还是释放它都应该无关紧要

【问题讨论】:

    标签: php output-buffering


    【解决方案1】:

    我认为在这种情况下它们的意思是一样的。 ob_flush() 用于将页面的 部分 刷新到客户端,而 ob_end_flush() 刷新整个缓冲区,然后销毁缓冲区。 ob_flush() 所做的是删除 in 缓冲区中的所有内容,但保留缓冲区本身,以便在 ob_flush() 调用之后可以将更多数据放入其中。


    我会尽力解释得更好。

    丢弃

    假设我有一个漂亮的亮橙色塑料桶。这是我的缓冲区。然后我得到一些沙子,代表 缓冲区的内容,然后将缓冲区(桶)填满。然后我拿起这个装满沙子的桶,把它倒进一个沙坑,这是我的客户。你会注意到沙子不见了,但桶还在。这就是the buffer contents are discarded 的含义——缓冲区本身可以重复使用(再次填充沙子)。在内存方面,内存被清空但没有被释放,因此可以再次填充。

    销毁

    现在,如果我们再次拿起我们的桶,再次装满沙子,清空沙子,然后放火烧桶,因为我们不再需要它,这就是 破坏缓冲区; 缓冲区中的数据消失了,但缓冲区本身也是如此。在内存方面,内存被释放以供其他用途。


    OP 询问,这在 PHP 中是否重要,没有指针?嗯,这取决于你想做什么。如果您正在处理一个长页面,并且想要(例如)将页眉和侧边栏发送到客户端,同时您处理页面的其余部分以便在完成后发送,请使用ob_flush()

    如果您想在没有任何输出的情况下将某些内容刷新到客户端,请使用ob_end_flush()


    我的意思是用一种相当傲慢的语气说话绝对不是不尊重;我想打个比方,让定义尽可能清晰。

    【讨论】:

    • "删除缓冲区中的所有内容,但保留它"?当你删除它时,你怎么能保留它?对不起,我没有得到你
    • 当您说ob_flush() 刷新页面的一部分时,您的意思是在嵌套输出缓冲区的情况下它只刷新最里面的缓冲区,而ob_end_flush() 会立即刷新所有缓冲区,即使有嵌套ob_start()?
    • 对不起!我已经编辑了我的问题。针对您的第二条评论,我的意思是 ob_flush() 允许缓冲更多输出并将其发送到客户端,而 ob_end_flush() 不允许。
    • 对不起,但我还是不明白。什么是更多的输出和更少的输出。有大小限制吗?抱歉,但这对我来说很难理解。关于您在回答中的编辑,我将编辑我的问题,以更好地传达我对此的不理解。
    • 这取决于你想做什么。如果您在刷新调用后没有回显任何其他内容,请使用ob_end_flush();这将结束脚本输出,而ob_flush() 允许将更多输出发送到客户端。
    【解决方案2】:

    ob_flush 不会关闭输出缓冲

    【讨论】:

    【解决方案3】:

    ob_end_flush() 显示缓冲区中的所有内容,然后销毁缓冲区。 ob_flush 做同样的事情,但不破坏缓冲区只是清除它。

    ob_flush() =

    ob_end_flush();
    ob_start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      相关资源
      最近更新 更多