PHP缓存机制输出控制详细解决方案
警告:不能修改头信息-头已经发送
echo'hello1;
头('content-type:文本/ HTML;字符集= UTF-8);
echo'hello2;
打开OB缓存有两种方法。
打开output_buffering = 4096 1。php.ini
这个指令是启用的,所以每一个PHP脚本调用ob_start()函数相当于开始,和php5.5默认打开了output_buffering =默认为4096。
2。使用ob_start()直接在程序;
打开输出缓冲区。当输出缓冲区被激活时,脚本将不输出内容(除了HTTP头),但需要输出的内容存储在内部缓冲区中。
内部缓冲区的内容可以被复制到与ob_get_contents字符串变量()函数,输出的内容存储在内部缓冲区中,你可以使用ob_end_flush()的功能。此外,该ob_end_clean()函数会默默丢弃缓冲区的内容。
* output_buffering =试验
* /
(ob_start) / /打开;ob缓存
echo'hello1 '; / /对象存储在缓存中
头('content-type:文本/ HTML;字符集= UTF-8 '); / /过程高速缓存中
/ / ob_end_clean(OB); / /清空缓存,并关闭对象缓存
echo'hello2 '; / /对象存储在缓存中
$str = ob_get_contents(OB); / /返回缓存的数据(不清除缓冲区)
file_put_contents('ob .txt,$str); / /保存$str文件
/ / ob_clean(OB); / /清空缓存
echo'hello3 '; / /对象存储在缓存中
echo'hello4 '; / /对象存储在缓存中
将生成的ob.txt文件,脚本在hello1hello2 / * * / hello1hello2hello3hello4,浏览器输出
如果ob_clean(打开) / *笔记,也没有内容的浏览器输出hello3hello4产生ob.txt文件。
如果(ob_end_clean)笔记 / *打开,然后ob.txt仍不满足,因为对OB的浏览器缓存关闭,输出hello2hello3hello4 * /
ob_flush()和()的例子ob_end_flush:
ob_start();
echo'abc '; / /对象存储在缓存中
头('content-type:文本/ HTML;字符集= UTF-8 '); / /过程高速缓存中
echo'hello '; / /对象存储在缓存中
ob_flush(OB); / /将缓存输出清除程序缓存,缓存的缓存没有OB,OB封闭
/ / ob_end_flush(OB) / /内容的缓存输出的程序,明确对象缓存,缓存关闭OB
echo'aa '; / /对象存储在缓存中
ob_get_contents(回声);
最终的输出abchelloaaaa / * * /
*注ob_flush,开放的ob_end_flush,abchelloaa * 最终输出/
小心 uff1a
在output_buffering = 4096的情况下,ob_end_clean()关闭只有一个ob缓存(即ob_start),和系统不是封闭的。
ob_end_flush()是相同的。
OB缓存的原理/原理:
1。打开OB缓存,首先将数据放在ob缓存中。
2。如果是头信息,把它直接放在程序缓存中。
三.当页面被执行到最后时,由OB缓存的数据被放置在程序缓存中,然后返回到浏览器一次。
最后,有一个刷新();强制PHP程序缓存到浏览器缓存。
功能:微软Internet Explorer的某些版本只在接收到256字节后才开始显示页面,因此必须发送一些额外的空间,让这些浏览器显示页面的内容。
回声str_repeat('',1024); / /重复输出多个字符(256个字节的浏览器缓存后无输出)
($ i = 0;$ i < 5;$ + +)
{
回声$ i;
(刷新);强制刷新程序缓存到浏览器缓存
休眠(1);休眠1秒,HTTP连接没有断开,每秒钟输出一美元。
}