The Server Pages
:: TSP Menu
- Home
- Authors
- Glossary
- RSS Feed

:: Servers
- CPanel
- Hosting
- Linux
- Windows

:: Webmaster
- Databases
- Design
- PHP
- Search Engines

:: Scripts
- Scripts

:: Documentation
- PHP Manual

:: Other
- Errors & Solutions
- TechPunt
- Wojjie

search for in the

ob_get_status> <ob_get_length
[edit] Last updated: Sat, 12 May 2012

view this page in

ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_levelReturn the nesting level of the output buffering mechanism

Description

int ob_get_level ( void )

Returns the nesting level of the output buffering mechanism.

Return Values

Returns the level of nested output buffering handlers or zero if output buffering is not active.

See Also



ob_get_status> <ob_get_length
[edit] Last updated: Sat, 12 May 2012
 
add a note add a note User Contributed Notes ob_get_level
mark dot richards at massmicro dot com 17-Mar-2012 09: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 03: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 04: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 07: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");
?>

 
show source | credits | sitemap | contact | advertising | mirror sites