PHP缓冲区ob_flush()与flush()的比较
PHP缓冲区ob_flush()与flush()的比较,php,flush,output-buffering,Php,Flush,Output Buffering,ob\u flush()和flush()之间有什么区别?为什么我必须同时调用这两个函数 报告说: 此函数将发送输出缓冲区的内容(如果有) 报告说: 刷新PHP的写缓冲区以及PHP使用的任何后端(CGI、web服务器等) 然而,它继续说: [it]可能无法覆盖web服务器的缓冲方案 所以,在我看来,我可以一直使用ob\u flush()。然而,当我这样做的时候,我得到了奇怪的结果。有人能简单地解释一下这里发生了什么吗?ob\u flush发送应用程序启动的缓冲区。任何PHP脚本中都可能有多个嵌套的
ob\u flush()
和flush()
之间有什么区别?为什么我必须同时调用这两个函数
报告说:
此函数将发送输出缓冲区的内容(如果有)
报告说:
刷新PHP的写缓冲区以及PHP使用的任何后端(CGI、web服务器等)
然而,它继续说:
[it]可能无法覆盖web服务器的缓冲方案
所以,在我看来,我可以一直使用
ob\u flush()
。然而,当我这样做的时候,我得到了奇怪的结果。有人能简单地解释一下这里发生了什么吗?ob\u flush
发送应用程序启动的缓冲区。任何PHP脚本中都可能有多个嵌套的ob_start()
ob_flush
将当前内容传递到上层
PHP本身可能(自行决定)缓冲区输出。这取决于后端。但是通常,FastCGI
本身有一个套接字缓冲区。因此,还需要调用flush()
,以将当前内容发送到web服务器
现在,web服务器本身可能会实现另一种缓冲方案(mod_deflate
或内容过滤器),您对此没有任何影响。但这很少,因为它需要专门配置
无论如何,两者都要使用。ob\u flush发送应用程序启动的缓冲区。任何PHP脚本中都可能有多个嵌套的
ob_start()
ob_flush
将当前内容传递到上层
PHP本身可能(自行决定)缓冲区输出。这取决于后端。但是通常,FastCGI
本身有一个套接字缓冲区。因此,还需要调用flush()
,以将当前内容发送到web服务器
现在,web服务器本身可能会实现另一种缓冲方案(mod_deflate
或内容过滤器),您对此没有任何影响。但这很少,因为它需要专门配置
无论如何,两者都要使用。
ob\u flush
刷新您使用类似ob\u start
的函数创建的输出缓冲区
flush
将PHP脚本本身的缓冲输出刷新到其调用方ob\u flush
刷新您使用类似于ob\u start的函数创建的输出缓冲区
flush
将PHP脚本本身的缓冲输出刷新到调用方我想这与您的。使用输出缓冲的显著优势在于它与数据压缩一起使用。如果您不使用ob\u gzhandler,那么没有什么好处flush
单独提交服务器上仍然存在的任何输出数据。使用ob\u start
及其对应的ob\u flush
、ob\u end\u clean
和ob\u end\u flush
,任何等待压缩的内容(将flush
和ob_flush
视为不同的存储桶-ob
将数据发送到flush
,flush
将数据发送到浏览器-可能不准确,但这正是想法)将被打包并发送到客户端。我想这与您的有关。使用输出缓冲的显著优势在于它与数据压缩一起使用。如果您不使用ob\u gzhandler
,则几乎没有什么好处。flush
单独提交服务器上仍然存在的任何输出数据。使用ob\u start
及其对应的ob\u flush
、ob\u end\u clean
和ob\u end\u flush
,任何等待压缩的内容(将flush
和ob\u flush
视为不同的存储桶-ob
将数据发送到flush
,flush
将数据发送到浏览器-可能不准确,但这是想法)将被打包并发送到客户端。ob flush()
是高级刷新。它刷新高级缓冲区,并将所有内容放入准备发送的低级内部缓冲区
- 请注意,
函数族会创建缓冲区堆栈,因此如果编写代码是为了利用这种堆栈,那么盲目地到处写入ob\u
确实会给您带来“奇怪的结果”ob\u flush()
flush()
是一种低级刷新,指示PHP刷新其内部低级数据缓冲区
下面是套接字层缓冲区;下面是网络层缓冲区。在最低级别,是沿着数据电缆的电子队列。ob\u flush()
是高级刷新。它刷新高级缓冲区,并将所有内容放在低级内部缓冲区中,以便发送
- 请注意,
函数族会创建缓冲区堆栈,因此如果编写代码是为了利用这种堆栈,那么盲目地到处写入ob\u
确实会给您带来“奇怪的结果”ob\u flush()
flush()
是一种低级刷新,指示PHP刷新其内部低级数据缓冲区
下面是套接字层缓冲区;下面是网络层缓冲区。在最底层,是沿着数据电缆的电子队列。谢谢,bucket类比是一个很好的例子。谢谢,bucket类比是一个很好的例子。使用ob_flush和flush,并按顺序使用。重要的细节丢失了这个答案是配置选项,它在php.ini的生产版本中的默认值是4096。这意味着当任何php脚本启动时,输出的前4096字节都会得到缓冲(在可使用
ob_flush()
刷新的缓冲区中)。这就是为什么需要使用ob_flush()
以及flush()的原因
。通过php.ini禁用输出缓冲
或调用ob\u end\u clean()
或