手机版

深入分析Php输出缓冲缓存和程序缓存

时间:2021-11-17 来源:互联网 编辑:宝哥软件园 浏览:

下面测试ob缓存和程序缓存:在测试之前,为了让测试效果更加明显,我们先关闭php.ini中的ob缓存,设置明显的错误级别。output _ buffering=off display _ errors=on代码1:复制代码如下:echo ' phpheader(' content-type : text/html;charset=' utf-8 ' ');echo ' ok那么PHP警告:就不能修改头信息——已经发送的头(输出起始于d : \ www \ Apache \ htdocs \ test \ T2 . PHP :2)在d : \ www \ Apache \ htdocs \ test \ T2 . PHP 3 online 30k代码2:复制代码如下: ob _ start();echo“PHP”;header(' content-type : text/html;charset=' utf-8 ' ');echo ' ok结果完全正确。原因分析:代码1: PHP在回显‘PHP’时已经向浏览器发送了一条头消息。当标题(' content-type : text/html;charset=' utf-8 ' ');当我看到另一个标题消息时,我已经把上面的标题消息打了回来,所以我在无法正确处理时犯了一个错误。代码2:Ob缓存打开。回显‘PHP’时,要调用到浏览器的数据先放入ob缓存,然后遇到一个头消息,也放入ob缓存。在页面的末尾,它根据http协议被发送到程序缓存,然后返回到浏览器。为了加深理解,请看下面的代码代码3:复制代码代码如下: ob _ start();echo“PHP”;header(' content-type : text/html;charset=' utf-8 ' ');echo ' okecho ' HR/';$ ob=ob _ get _ contents();echo $ ob意志输出

Ob_get_contents()只获取Ob缓存的内容,但不清楚它们。Ob_get_contents()必须使用代码4才能清除Ob缓存:复制代码如下: ob _ start();echo“PHP”;ob _ clean();//在不关闭缓存区的情况下清除缓存内容,并使用(添加内容)头(' content-type : text/html;charset=' utf-8 ' ');echo ' okecho ' HR/';$ ob=ob _ get _ contents();echo $ ob结果:

代码5:复制代码如下: ob _ start();echo“PHP”;ob _ end _ clean();//清空缓存内容并关闭缓存区,但ob_get_contents无法获取内容头(' content-type : text/html;charset=' utf-8 ' ');echo ' okecho ' HR/';$ ob=ob _ get _ contents();echo $ ob结果:

代码6:复制代码如下: ob _ start();echo“PHP”;ob _ end _ flush();//将缓存发送到程序缓存并关闭ob缓存头(' content-type : text/html;charset=' utf-8 ' ');echo ' okecho ' HR/';$ ob=ob _ get _ contents();echo $ ob代码7:将代码6与ob_flush()进行比较,复制代码如下: ob _ start();echo“PHP”;ob _ flush();//将ob缓存发送到程序缓存,不关闭Ob缓存头(' content-type : text/html;charset=' utf-8 ' ');echo ' okecho ' HR/';$ ob=ob _ get _ contents();echo $ ob结果:

Ob_clean()清空Ob缓存的内容,但不关闭Ob_get_flush()并将缓存刷新到程序缓存中。关闭ob缓存的代码是8:复制的代码如下: Ob _ start();回声' ABC ';header(' content-type : text/html;charset=' utf-8 ' ');回声“你好”;ob _ flush();回声' aa ';echo ob _ get _ contents();//abcheloaaaa2.ob _ flush()、flush()和程序缓存代码9:复制的代码如下: ob _ start();回声“a”;flush();//将ob缓存刷新到程序缓存,再刷新到浏览器输出,不影响Ob缓存echo Ob _ get _ contents();//aa代码10:复制代码如下: ob _ start();回声“a”;ob _ flush();//将Ob缓存刷新到程序缓存,ob echo' br/ob _ con '中没有缓存内容。ob _ get _ contents();//a正常输出,Ob中没有内容程序缓存:代码11:复制代码如下:echo str_repeat(',1024);//某些版本的Microsoft Internet Explorer在收到256字节后才开始显示页面,因此必须发送一些额外的空格,让这些浏览器显示页面内容。for($ I=0;$ i5$ I){ echo $ I;echo ' br/';睡眠(1);flush();}如果没有flush(),将在一秒钟内输出一个数字;所有输出将首先临时存储在程序缓存中,然后作为一个整体返回给浏览器。这个例子说明了程序缓存。

版权声明:深入分析Php输出缓冲缓存和程序缓存是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。