PHP 8.5.0 Alpha 1 available for testing

ob_get_clean

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

ob_get_cleanObtiene el contenido del búfer de salida activo y lo desactiva

Descripción

ob_get_clean(): string|false

Esta función llama al gestor de salida (con los flags PHP_OUTPUT_HANDLER_CLEAN y PHP_OUTPUT_HANDLER_FINAL), ignora su valor de retorno, devuelve el contenido del búfer de salida activo y lo desactiva.

ob_get_clean() fallará sin un búfer de salida activo iniciado con el flag PHP_OUTPUT_HANDLER_REMOVABLE.

ob_get_clean() eliminará el contenido del búfer de salida activo incluso si fue iniciado sin el flag PHP_OUTPUT_HANDLER_CLEANABLE.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

Devuelve el contenido del búfer de salida activo en caso de éxito o false en caso de fallo.

Precaución

ob_get_clean() devolverá false pero no generará una E_NOTICE si no hay un búfer de salida activo.

Errores/Excepciones

Si la función falla, genera una E_NOTICE.

Ejemplos

Ejemplo #1 Ejemplo con ob_get_clean()

<?php

ob_start
();

echo
"¡Hola mundo!";

$out = ob_get_clean();
$out = strtolower($out);

var_dump($out);
?>

El resultado del ejemplo sería:

string(18) "¡hola mundo!"

Ver también

  • ob_start() - Activa el temporizador de salida
  • ob_get_contents() - Devuelve el contenido del búfer de salida
  • ob_clean() - Limpiar (borrar) el contenido del búfer de salida activo.
  • ob_end_clean() - Elimina (limpia) el contenido del búfer de salida activo y lo desactiva.
  • ob_get_flush() - Vacía (envía) el valor de retorno del gestor de salida activo, devuelve el contenido del búfer de salida activo y lo desactiva.

add a note

User Contributed Notes 3 notes

up
79
geo dot artemenko at gmail dot com
11 years ago
The definition should mention that the function also "turns off output buffering", not just cleans it.
up
32
steven at bielik dot com
14 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
7
paul+phpnet at earth2me dot com
11 years 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();
?>
To Top