Output Control 函数
在线手册:中文 英文
PHP手册

ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_level返回输出缓冲机制的嵌套级别

说明

int ob_get_level ( void )

返回输出缓冲机制的嵌套级别。

返回值

返回嵌套的输出缓冲处理程序的级别;或者是,如果输出缓冲区不起作用,返回零。

参见


Output Control 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 返回输出缓冲机制的嵌套级别

用户评论:

mark dot richards at massmicro dot com (17-Mar-2012 10:24)

It was noted that ob_get_level() reports 1 prior to starting buffering, and in php 5.3.6-13 I can confirm this:

    <?php
     
echo ob_get_level(); // --> 1
   
?>

It seems an internal counter for the output buffering needs to be initialized.  To start things off properly, this appears to do:

    <?php
      ob_end_clean
(); 
      echo
ob_get_level(); // --> 0
   
?>

(18-May-2005 04:45)

Sometimes, ob_get_level() may be off by 1 because at the start of the script, it will return 1 even if ob_start() has never been called (and clearing the output buffer via ob_end_clean() and the like can be done without error).  As a result, the first ob_start() will have an ob_get_level() of 2, the second will be 3, and so on.

I'm not sure if this is a PHP 5 thing or [if it's related to when a] server is set to gzip all html documents.

Also, up until at least PHP 5.0.4 (current version), 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.  If you want to do something with the output buffer from within an object before the script exits, using a callback function with ob_start() is the way to go.

bonzini at gnu dot org (07-Jul-2004 05:03)

Even under older PHP, you can decide if output buffering is active (i.e. ob_get_level() > 0) using

   <?php $ob_active = ob_get_length () !== FALSE ?>

Paolo

tit dot petric at nospam dot telemach dot net (22-Jun-2002 08:01)

in case you wanted to use a function to use for deleting all buffered output (to clearly display errors), you have it below

this eliminates the need for ob_end_clean_all() in php. good code :)

<?php
function condor_error($errno, $errstr, $errfile, $errline)
{
       
$errors = array(E_USER_ERROR, E_ERROR, E_PARSE);
        if (
in_array($errno,$errors)) {
                while (
ob_get_level()) {
                       
ob_end_clean();
                }
                echo
"<B>FATAL</B> [".$errno."] ".$errstr."<br>\n";
                echo
"Fatal error at line ".$errline." of file ".$errfile;
                echo
", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n";
                echo
"Aborting...<br><br>\n\n";
                exit;
        }
}

set_error_handler("condor_error");
?>