当前位置:首页 > PHP教程 > php应用 > 列表

PHP嵌套输出缓存的例子

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-13 11:04:44 浏览: 评论:0 

说到缓存估计大家会想到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

想要正确输出也很简单:

  1. ob_end_clean(); 
  2. echo ob_get_level(); //0 

回到正题:

  1. ob_end_clean(); 
  2.  
  3. ob_start(); 
  4. echo 'php1';//此处并不会在页面中输出 
  5. $a = ob_get_level(); 
  6. $b = ob_get_contents();//获得缓存结果,赋予变量 
  7. ob_clean(); 
  8.  
  9. ob_start(); 
  10. echo 'php2';//此处并不会在页面中输出 
  11. $c = ob_get_level(); 
  12. $d = ob_get_contents();//获得缓存结果,赋予变量 
  13. ob_clean(); 
  14.  
  15. ob_start(); 
  16. echo 'php3';//此处并不会在页面中输出 
  17. $e = ob_get_level(); 
  18. $f = ob_get_contents();//获得缓存结果,赋予变量 
  19. ob_clean(); 
  20. //开源软件:phpfensi.com 
  21. echo 'level:'.$a.',ouput:'.$b.'<br>'
  22. echo 'level:'.$c.',ouput:'.$d.'<br>'
  23. echo 'level:'.$e.',ouput:'.$f.'<br>'
  24. //结果如下: 
  25. level:1,ouput:php1 
  26. level:2,ouput:php2 
  27. level:3,ouput:php3 

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

  1. ob_end_clean(); 
  2.  
  3. ob_start(); 
  4. echo 'php1'
  5. $a = ob_get_level(); 
  6. $b = ob_get_contents(); 
  7. ob_clean(); 
  8.  
  9. ob_start(); 
  10. echo 'php2'
  11. $c = ob_get_level(); 
  12. $d = ob_get_contents(); 
  13. ob_end_clean();  //清空缓存并关闭缓存 
  14.  
  15. ob_start(); 
  16. echo 'php3'
  17. $e = ob_get_level(); 
  18. $f = ob_get_contents(); 
  19. ob_clean(); 
  20.  
  21. echo 'level:'.$a.',ouput:'.$b.'<br>'
  22. echo 'level:'.$c.',ouput:'.$d.'<br>'
  23. echo 'level:'.$e.',ouput:'.$f.'<br>'
  24. //结果如下: 
  25. level:1,ouput:php1 
  26. level:2,ouput:php2 
  27. level:2,ouput:php3

Tags: PHP嵌套输出 PHP输出缓存

分享到: