我对PHP函数ob_flush()
和ob_end_flush()
感到困惑。
关于ob_flush
函数The buffer contents are discarded after ob_flush() is called.This function does not destroy the output buffer like ob_end_flush() does.
discarded
我对destroyed
和ob_flush()
这里的单词感到困惑。即使在ob_end_flush()
的情况下丢弃了缓冲区内容,也无法访问它们,即使它们被销毁,如{{1}}的情况也无法访问它们。
那么这两个函数之间的差异是什么?
更新
回应manual我不明白删除缓冲区中的所有内容但保持缓冲区与删除整个缓冲区(释放它)的重要性,因为PHP没有指针的概念,你不能得到缓冲区的地址,所以你是否保留空缓冲区或者你是否释放它应该是无关紧要的
答案 0 :(得分:19)
我认为在这种情况下他们的意思是一样的。当您要将页面的部分刷新到客户端时使用ob_flush()
,而ob_end_flush()
刷新整个缓冲区,然后销毁缓冲区。 ob_flush()
所做的是删除缓冲区中的所有,但保留缓冲区本身,以便在ob_flush()
调用后可以将更多数据放入其中。
我会试着更好地解释一下。
假设我有一个漂亮,明亮的橙色塑料桶。这是我的缓冲区。然后我得到一些沙子,代表缓冲区的内容,并填满缓冲区(桶)。然后我用沙子挑选这个桶,然后将它倒入沙坑中,这是我的客户端。你会注意到沙子已经消失了,但水桶仍然存在。这就是the buffer contents are discarded
的意思 - 缓冲区本身可以重复使用(再次填充沙子)。在内存方面,内存已清空但未释放,因此可以再次填充。
现在,如果我们再次拿起我们的桶,再次用沙子填满,将沙子清空,然后放火烧桶,因为我们不再需要它,这叫做破坏缓冲区< /强>; 缓冲区中的数据消失了,但缓冲区本身也是。在内存方面,内存可以用于其他用途。
ob_flush()
。
如果您希望在客户端之后不再输出任何内容,请使用ob_end_flush()
。
我的意思绝对不是在以相当光顾的语气说话时不尊重;我想做一个类比,使定义尽可能清晰。
答案 1 :(得分:5)
ob_flush不会关闭输出缓冲
答案 2 :(得分:1)
ob_end_flush()
显示缓冲区中的所有内容,然后销毁缓冲区。 ob_flush
做同样的事情,但不会破坏缓冲区只是清除它。
ob_flush()
=
ob_end_flush();
ob_start();