lov*_*esh 8 php output-buffering
我感到困惑的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.
Run Code Online (Sandbox Code Playgroud)
我感到困惑的话discarded,并destroyed在这里.即使缓冲内容在ob_flush()它们无法被访问的情况下被丢弃,即使它们被丢弃也是如此,因为ob_end_flush()它们无法被访问.那么这两个函数之间的区别是什么?
更新:
为了回应JamWaffles的回答,我不明白删除缓冲区中的所有内容的重要性,但保持缓冲区与删除整个缓冲区(释放它),因为PHP没有指针的概念,你不能得到缓冲区的地址,所以它是否无关紧要你随身携带空缓冲区,或者你将它释放出来
Boj*_*les 21
我认为在这种情况下他们的意思是一样的.ob_flush()当你想刷新使用部分页面到客户端的,而ob_end_flush()刷新整个缓冲区,然后销毁缓冲区.什么ob_flush()做的就是删除一切在缓冲区,但保持缓冲本身,以便更多的数据可以在之后被放入它ob_flush()的呼叫.
我会试着更好地解释一下.
假设我有一个漂亮,明亮的橙色塑料桶.这是我的缓冲区.然后我得到一些沙子,代表缓冲区的内容,然后填满缓冲区(桶).然后我用沙子挑选这个桶,倒入沙坑,这是我的客户.你会注意到沙子已经消失了,但水桶仍然存在.这就是所谓的the buffer contents are discarded- 缓冲区本身可以重复使用(再次填充沙子).在内存方面,内存已清空但未释放,因此可以再次填充.
现在,如果我们再次拿起我们的桶,再次用沙子填满,将沙子清空,然后放火烧桶,因为我们不再需要它,这就是所谓的破坏缓冲区 ; 该数据在缓存走了,但这样是缓冲区本身.在内存方面,内存可以用于其他用途.
OP问,这在PHP中是否重要,没有指针?嗯,这取决于你想做什么.如果您正在处理长页面,并希望(例如)在处理页面的其余部分以便在完成后发送时将标题和侧边栏发送到客户端,请使用ob_flush().
如果你想在没有任何更多输出的情况下向客户端刷新内容,请使用ob_end_flush().
我的意思绝对不是在以相当光顾的语气说话时不尊重; 我想做一个类比,使定义尽可能清晰.
ob_flush不会关闭输出缓冲
| 归档时间: |
|
| 查看次数: |
11835 次 |
| 最近记录: |