php – 什么是ob_flush和ob_end_flush之间的区别?

我对 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.

我对这里丢弃和销毁的词语感到困惑.即使在ob_flush()的情况下丢弃了缓冲区内容,也无法访问它们,即使它们被破坏,如ob_end_flush(),也无法访问它们.
那么这两个函数间的区别是什么?

更新:

为了回应JamWaffles answer,我不明白删除缓冲区中的所有内容的重要性,但保持缓冲区与删除整个缓冲区(释放它),因为PHP没有指针的概念,你不能得到缓冲区的地址所以它是无关紧要的你是否应该是无关紧要的保持空缓冲区或你释放它

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

我会试着更好地解释一下.

废弃

假设我有一个漂亮,明亮的橙色塑料桶.这是我的缓冲区.然后我得到一些沙子,代表缓冲区的内容,然后填满缓冲区(桶).然后我用沙子把这个桶装进去,然后把它倒进沙坑里,这是我的客户.你会注意到沙子已经消失了,但水桶仍然存在.这就是缓冲区内容被丢弃的意思 – 缓冲区本身可以重复使用(再次填充沙子).在内存方面,内存已清空但未释放,因此可以再次填充.

摧毁

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

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

如果你想在没有任何更多输出的情况下向客户端刷新内容,请使用ob_end_flush().

我的意思绝对不是在以相当光顾的语气说话时不尊重;我想做一个类比,使定义尽可能清晰.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...