ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_cleanObtener el contenido del búfer actual y eliminar el búfer de salida actual

Descripción

string ob_get_clean ( void )

Obtiene el contenido del búfer actual y elimina el búfer de salida actual.

ob_get_clean() básicamente ejecuta ob_get_contents() y ob_end_clean().

El búfer de salida debe estar iniciado por ob_start() con el indicador PHP_OUTPUT_HANDLER_CLEANABLE Si no, ob_get_clean() no funcionará.

Valores devueltos

Devuelve el contenido del búfer de salida y finaliza el almacenamiento en el mismo. Si el almacenamiento en el búfer de salida no está activo, entonces devuelve FALSE.

Ejemplos

Ejemplo #1 Un ejemplo sencillo de ob_get_clean()

<?php

ob_start
();

echo 
"Hola Mundo";

$salida ob_get_clean();
$salida strtolower($salida);

var_dump($salida);
?>

El resultado del ejemplo sería:


string(10) "hola mundo"

Ver también

add a note add a note

User Contributed Notes 6 notes

up
11
steven at bielik dot com
3 years ago
Also, don't forget that you will need to ob_start() again for any successive calls:

<?php
ob_start
();
echo
"1";
$content = ob_get_clean();

ob_start(); // This is NECESSARY for the next ob_get_clean() to work as intended.
echo "2";
$content .= ob_get_clean();

echo
$content;
?>

Output: 12

Without the second ob_start(), the output is 21 ...
up
5
paul+phpnet at earth2me dot com
1 year ago
Keep in mind that output may be buffered by default, depending on how you are running PHP (CGI, CLI, etc.).   You can use ob_get_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 block.

Something like this is almost guaranteed to break stuff:

<?php
// Don't ever do this!
while (ob_get_level() > 1)
{
   
ob_end_flush();
}

$content = ob_get_clean();
?>

The problem is that number, "1".  Using a fixed number there is asking for trouble.  Instead, use ob_get_level() to get the number of output buffers applied when your code starts, and return to that number, if you really must use an unknown number of output buffers:

<?php
ob_start
();
$saved_ob_level = ob_get_level();

// Do stuff here:
run_something();

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

// And now, the final output buffer that belongs to us:
$content = ob_get_clean();
?>
up
5
sergei dot solomonov at gmail dot com
2 years ago
<?php
ob_start
();
echo
"1";
$content = ob_get_clean();

echo
"2";
$content .= ob_get_clean();

echo
$content;
?>

This script outputs 21 in CLI mode and 12 otherwise (under my apache and nginx)
up
2
geo dot artemenko at gmail dot com
8 months ago
The definition should mention that the function also "turns off output buffering", not just cleans it.
up
0
webmaster at ragnarokonline dot de
11 years ago
Running PHP4 < 4.3.0, you can simply add the following to use the function anyway:

<?php
if (!function_exists("ob_get_clean")) {
    function
ob_get_clean() {
       
$ob_contents = ob_get_contents();
       
ob_end_clean();
        return
$ob_contents;
    }
}
?>
up
-4
ludvig dot ericson at gmail dot com
9 years ago
Notice that the function beneath does not catch errors, so throw in an @ before those ob_* calls
To Top