首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ob_flush和ob_end_flush有什么区别?

ob_flush和ob_end_flush有什么区别?
EN

Stack Overflow用户
提问于 2011-09-08 22:40:49
回答 3查看 14.3K关注 0票数 9

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

代码语言:javascript
复制
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()那样,它们也不能被访问。那么这两种功能之间有什么区别呢?

更新:

作为对JamWaffles答案的响应,我不理解删除缓冲区中的所有内容的重要性,而是保留缓冲区与删除整个缓冲区(释放它)的重要性,因为PHP没有指针的概念,并且无法获得缓冲区的地址,所以不管您是否将空缓冲区保存在一起还是释放它,都是无关紧要的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-08 22:43:57

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

我会尽量解释得更好。

弃置

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

被毁

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

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

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

我绝对没有不尊重的意思,用一种相当威严的口吻说话;我想作一个类比,使定义尽可能清楚。

票数 22
EN

Stack Overflow用户

发布于 2011-09-08 22:45:27

ob_flush不关闭输出缓冲。

票数 5
EN

Stack Overflow用户

发布于 2017-04-14 20:49:01

ob_end_flush()显示缓冲区中的所有内容,然后销毁缓冲区。ob_flush也会这样做,但不会破坏缓冲区,只会清除缓冲区。

ob_flush() =

代码语言:javascript
复制
ob_end_flush();
ob_start();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7355356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档