zoukankan      html  css  js  c++  java
  • PHP ob_get_level嵌套输出缓冲

    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

  • 相关阅读:
    好的Qt学习资料
    QT QMap介绍与使用
    Qt缺少调试器
    vs2012+Qt5.3.1环境添加新的ui界面的方法
    QT定时器的使用
    Qt中forward declaration of struct Ui::xxx的解决
    linux-svn命令
    如何编写Windows服务
    为你的爬虫提提速?
    Python爬虫的N种姿势
  • 原文地址:https://www.cnblogs.com/raobenjun/p/8041670.html
Copyright © 2011-2022 走看看