在output_bufferingPHP中的一个简短的讨论
在PHP中,我们大致可以将缓存划分为客户端缓存(浏览器缓存)、服务器端缓存(服务器缓存),因为PHP基于B/s架构,我们可以理解浏览器端缓存和服务器端缓存。
在服务器端PHP自己的缓存中,它可以分为两大类缓存!程序缓存和ob缓存!这也是我们服务器端缓存的主要内容!
PHP中缓存的输出顺序是:
打开PHP的输出缓存:回声,打印的PHP服务器缓冲-> output_buffering ->浏览器-> ->浏览器显示缓冲
PHP输出缓存不是打开的:回声、打印>缓冲区>缓冲区>服务器浏览器浏览器显示
输出缓存:IE浏览器是256bytes,Chrome和Firefox都1000bytes,只输出数据达到这个长度,或脚本结束,浏览器会在页面输出数据。
两。服务器端的响应过程
a,客户端向服务器端发送请求响应!
B,Apache服务器加载PHP模块,并打开相应的进程(或线程)来运行相应的PHP脚本页面!
c,不打开ob缓存,运行的结果都放在程序缓存中,然后打包并发送到浏览器!浏览器呈现页面以创建我们最后看到的网页!
d,当打开OB缓存时,运行结果将分别放入ob缓存和程序缓存中。当程序运行到最后一行时,它会将ob缓存中的数据返回给程序缓存,然后将其打包回浏览器!
三,OB缓存的常用用法!
一、output_buffering = 4096,以较小的(小于一个缓冲)
($ i = 0;$ i < 5;$ + +){
回声$ i;
睡眠(1);
}
运行结果:当所有脚本都完成时,输出不输出,因为数据不完全是缓冲区的大小。
B、output_buffering = 4096,输出数据量少(少于一个缓冲),关闭output_buffering,并修改output_buffering = 0的php.ini
回声str_repeat(1024); / /重复输出一个空白
($ i = 0;$ i < 5;$ + +){
$;
同花顺();
睡眠(1);
}
操作结果:由于OB被禁用,无需等待脚本完成,它可以输出,数据不在ob中,并且可以看到间歇性的间歇输出。
C、output_buffering = 4096,输出数据量较大(大于一个缓冲),不使用ob_start()
($ i = 0;$ i < 5;$ + +){
回声file_get_contents('f.txt)。$ I.;
睡眠(2);
}
操作结果:f.txt是文件大于4KB,因为它是默认值大于缓冲区,缓冲区空间不够,每当全缓冲输出,所以我们可以看到间歇输出。
D、output_buffering = 4096,输出数据量较大(大于一个缓冲),使用ob_start()
ob_start();
($ i = 0;$ i < 5;$ + +){
回声file_get_contents('f.txt)。$ I.;
睡眠(2);
}
运行结果:由于使用的ob_start(),它将设立缓冲区有足够的空间,那么它将被保存到脚本执行。
E、output_buffering =,用ob_start()
ob_start();
回声ABC;
标题(内容类型:文本/ HTML;字符集= UTF-8);
你好;
ob_end_flush();
回声aa;
ob_get_contents(回声);
运行结果:abc—
F、output_buffering =关闭,使用ob_start()
ob_start();
回声ABC;
标题(内容类型:文本/ HTML;字符集= UTF-8);
你好;
ob_end_flush();
回声aa;
ob_get_contents(回声);
运行结果:abc—
输出缓冲区堆积,这意味着当一个ob_start()是积极的,你可以调用另一个ob_start()。只是确保ob_end_flush适当数量的()倍称为正确。如果多输出回调函数是活跃的,输出的内容将被过滤通过他们在嵌套的顺序。
注:在PHP5。2,默认情况下OB被关闭,默认值在5.3之后打开。
常见的方法:
1.ob_start
激活output_buffering机制,一旦激活,脚本不再直接输出到浏览器,但暂时写入PHP缓冲区。直到脚本完成发送。
2.ob_get_contents
得到的数据在PHP缓存,注:打电话之前ob_end_clean(),或者你只会空字符。
3.ob_end_flush和ob_end_clean
ob_end_flush将在PHP输出缓冲的数据,但它不会是空的。
ob_end_clean不会输出,只能以明确的数据在PHP缓存。
4.ob_flush,冲洗,ob_implicit_flush
ob_flush刷新数据从PHP缓冲程序缓存
刷新将刷新程序到浏览器缓存。
ob_implicit_flush将打开或关闭绝对(隐含的)刷。绝对的(隐含的)刷将每个输出的电话后,导致涂刷,所以没有显式调用需要冲洗()
四,OB缓存的作用!
OB在应用的各个方面都缓慢存在,但我主要知道两个方面!
当站点准备创建静态站点时,选择OB缓存是一个不错的选择!
B,警告:不能修改头信息-错误已经发送的头!
造成错误的原因是由于响应头和相应主体的位置错位,在正常情况下,服务器返回到浏览器的相应内容,应该是:响应头+响应体!
但是,如果我们启动OB缓存,相应的头信息(通常由头()函数设置)将被放入程序缓存中。
和其他的输出,如回声print_r var_dump,将OB缓存!
当程序结束,或者OB缓存关闭事实时,由OB缓存的内容被放入程序缓存中!确保响应头信息始终位于响应的主要内容之前!
以上是本文的全部内容,希望大家能喜欢。