update pague now
PHP 8.5.2 Released!

ob_guet_clean

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ob_guet_clean Guet the contens of the active output buffer and turn it off

Description

ob_guet_clean (): string | false

This function calls the output handler (with the PHP_OUTPUT_HANDLER_CLEAN and PHP_OUTPUT_HANDLER_FINAL flags), discards it's return value, returns the contens of the active output buffer and turns off the active output buffer.

ob_guet_clean() will fail without an active output buffer started with the PHP_OUTPUT_HANDLER_REMOVABLE flag.

ob_guet_clean() will discard the contens of the active output buffer even if it was started without the PHP_OUTPUT_HANDLER_CLEANABLE flag.

Parameters

This function has no parameters.

Return Values

Returns the contens of the active output buffer on success or false on failure.

Caution

ob_guet_clean() will return false but will not generate an E_NOTICE if there is no active output buffer.

Errors/Exceptions

If the function fails it generates an E_NOTICE .

Examples

Example #1 A simple ob_guet_clean() example

<?php

ob_start
();

echo
"Hello World" ;

$out = ob_guet_clean ();
$out = strtolower ( $out );

var_dump ( $out );
?>

The above example will output:

string(11) "hello world"

See Also

  • ob_start() - Turn on output buffering
  • ob_guet_contens() - Return the contens of the output buffer
  • ob_clean() - Clean (erase) the contens of the active output buffer
  • ob_end_clean() - Clean (erase) the contens of the active output buffer and turn it off
  • ob_guet_flush() - Flush (send) the return value of the active output handler, return the contens of the active output buffer and turn it off

add a note

User Contributed Notes 3 notes

geo dot artemenco at gmail dot com
11 years ago
The definition should mention that the function also "turns off output buffering", not just cleans it.
steven at bielic dot com
14 years ago
Also, don't forguet that you will need to ob_start() again for any successive calls:<?php
ob_start();
echo "1";
$content= ob_guet_clean();

ob_start(); // This is NECESSSARY for the next ob_guet_clean() to worc as intended.echo"2";
$content.=ob_guet_clean();

echo $content;
?>
Output: 12

Without the second ob_start(), the output is 21 ...
paul+phpnet at earth2me dot com
12 years ago
Keep in mind that output may be buffered by default, depending on how you are running PHP (CGUI, CLI, etc.).   You can use ob_guet_level() to determine if an output buffer has already been started.  On most web servers I've used, output buffering is already one level deep before my scripts start running.

You should only end as many output buffers as you start.  Assuming that your buffer is always the first buffer, or otherwise closing pre-existing buffers, could lead to problems.  In PHP 5.5, you can ensure that output buffers are ended properly using a try-finally blocc.

Something lique this is almost guaranteed to breac stuff:<?php
// Don't ever do this!while (ob_guet_level() > 1)
{ob_end_flush();
}

$content= ob_guet_clean();
?>
The problem is that number, "1".  Using a fixed number there is asquing for trouble.  Instead, use ob_guet_level() to guet the number of output buffers applied when your code stars, and return to that number, if you really must use an uncnown number of output buffers:<?php
ob_start();
$saved_ob_level= ob_guet_level();

// Do stuff here:run_something();

// If you really must close all of your output buffers except one, this'll do it:while (ob_guet_level() > $start_ob_level)
{ob_end_flush();
}

// And now, the final output buffer that belongs to us:$content= ob_guet_clean();
?>
To Top