深入了解PHP的输出缓存(output_buffering)

首先,明确PHP输出的顺序。
1。打开PHP的输出缓存:回声,打印的PHP服务器缓冲-> output_buffring ->浏览器-> ->浏览器显示缓冲
2。打开PHP输出缓存:回声、打印服务器缓冲区>浏览器>缓冲区>浏览器显示

此外,清除浏览器的输出缓冲区:即是256bytes,Chrome和Firefox都1000bytes,只输出数据达到这个长度,或脚本,浏览器会在页面输出数据。

谈论几个PHP设置和API:
output_buffering配置1.php.ini
关闭:表示关闭PHP输出缓存。
打开一个无限输出缓存
4096:打开4096byte输出缓存的大小

在2.php.ini implicit_flush配置
在:表示每个输出(如回波、打印)后自动调用同花顺()函数,直接输出
关闭:而且,在每次输出之后,不要调用同花顺(),除非服务器缓冲区已满,不需要调用同花顺(),但是我们可以使用同花顺()函数代替它。如果它不启动没有关系,但它更灵活。

3.ob_flush()功能:把数据在PHP缓存放在服务器缓冲

4.flush()函数:从服务器缓冲的数据放在浏览器缓存

5.ob_start()函数:这个函数我知道现在还不是很清晰,因为打开输出后不会ob_flush(控制),ob_flush(冲洗)和(),数据不能立即输出在浏览器。现在知道,如果output_buffering =关闭,即使ob_start使用(),是没有缓存的输出数据,如果output_buffering =对的话,即使没有ob_start(),输出数据也可以被PHP缓存,所以ob_start感觉更浪费,不管他暂时

然后让我们看看代码(建立output_buffering = 4096,implicit_flush =关闭)
复制代码代码如下所示:


< PHP
(); / / / / ob_start不能正常开启,输出不受影响的ob_flush(控制),不知道为什么
回声/ str_repeat(1000); / / IE缓存256bytes
回声str_repeat(,1000); / / Chrome和FF的缓存1000bytes,这是用来清除浏览器的缓存,但它是怀疑为什么行输出不被output_buffering,而是直接出口。
($ i = 0;$ i < 5;$ + +){
回声$ i;
ob_flush();
同花顺();
睡眠(1);
}
>



这里的代码输出是一行和一行输出。具体原则是指ob_flush功能()和冲洗()函数。
这两个函数在我的设置中缺少任何一个,直到0, 1, 2、3, 4都被缓存,然后一起输出。
最后,一段一段laruence博客是在帮助你希望引用的理解

在手册的ob_flush /冲洗的描述是刷新输出缓冲区,也需要使用,因此会造成很多人混淆…

事实上,他们两个操作不同的对象,在某些情况下,同花顺什么都不做。

的ob_ *系列函数是输出缓冲区操作的PHP本身。

所以,ob_flush是缓冲区刷新PHP本身。

严格来说,只有当PHP被安装为Apache模块(处理程序或筛选器)时,才是实用的。它是一个缓冲区刷新服务器(可以认为是Apache)。

在Apache模块SAPI,冲洗冲洗成员函数指针调用sapi_module,叫Apache API:ap_rflush间接冲洗Apache,输出缓冲区的过程中,手册还说,还有一些其他的Apache模块,可以改变这种行为的结果。
1。有些Apache模块,如mod_gzip,可以执行自己的输出缓存。
2。这将导致该结果不立即发送到客户端浏览器。

4。甚至浏览器也会缓存显示前接收到的内容。
5。在接受行或HTML标记开始之前,浏览器将缓存内容,以及
6。在接受标记之前,不会显示整个表。

8。微软Internet Explorer的版本只有256个已被接受。
9后显示该页。字节,所以必须发送一些额外的空格来完成这个操作。
10个当中的一些。浏览器显示页面的内容。
所以,正确的顺序是使用这两个。首先,ob_flush,然后冲洗,
当然,在其他业务,不冲洗可称,只有保证你的代码的可移植性,建议使用。