首页 > php开发 > PHP嵌套输出缓存的例子

PHP嵌套输出缓存的例子

说到缓存估计大家会想到ob_start函数吧,但如果要做到嵌套输出缓存的话我们是需要使用另一个函数了,下面一起来看看吧.

PHP的输出缓存是可以嵌套的,用ob_get_level()就可以输出嵌套级别,测试发现在cli和浏览器下输出结果不一样(PHP5.4).

ob_level1.png手册说明如下:

ob_get_level() will always return 0 inside a destructor.

This happens because the garbage collection for output buffers has already done before the destructor is called

想要正确输出也很简单:

ob_end_clean(); 
echo ob_get_level(); //0

回到正题:

ob_end_clean(); 

ob_start(); 
echo 'php1';//此处并不会在页面中输出 
$a = ob_get_level(); 
$b = ob_get_contents();//获得缓存结果,赋予变量 
ob_clean(); 
 
ob_start(); 
echo 'php2';//此处并不会在页面中输出 
$c = ob_get_level(); 
$d = ob_get_contents();//获得缓存结果,赋予变量 
ob_clean(); 
 
ob_start(); 
echo 'php3';//此处并不会在页面中输出 
$e = ob_get_level(); 
$f = ob_get_contents();//获得缓存结果,赋予变量 
ob_clean(); 
 
echo 'level:'.$a.',ouput:'.$b.'<br>'; 
echo 'level:'.$c.',ouput:'.$d.'<br>'; 
echo 'level:'.$e.',ouput:'.$f.'<br>'; 
//结果如下: 
level:1,ouput:php1 
level:2,ouput:php2 
level:3,ouput:php3

当然,当你关闭某个级别的缓冲,如下测试:

ob_end_clean(); 
	 
ob_start(); 
echo 'php1'; 
$a = ob_get_level(); 
$b = ob_get_contents(); 
ob_clean(); 
 
ob_start(); 
echo 'php2'; 
$c = ob_get_level(); 
$d = ob_get_contents(); 
ob_end_clean();  //清空缓存并关闭缓存 
 
ob_start(); 
echo 'php3'; 
$e = ob_get_level(); 
$f = ob_get_contents(); 
ob_clean(); 
 
echo 'level:'.$a.',ouput:'.$b.'<br>'; 
echo 'level:'.$c.',ouput:'.$d.'<br>'; 
echo 'level:'.$e.',ouput:'.$f.'<br>'; 
//结果如下: 
level:1,ouput:php1 
level:2,ouput:php2 
level:2,ouput:php3


文章网址:http://www.phprm.com/develop/fs9241.html

随意转载^^但请附上教程地址。

标签:php嵌套输出 php输出缓存

发表留言