W3docs

Función PHP ob_get_clean(): Todo lo que necesitas saber

Aprende a usar ob_get_clean() en PHP para capturar el contenido del búfer de salida y desactivar el almacenamiento en búfer en un solo paso.

La función ob_get_clean() captura todo lo que PHP ha escrito en el búfer de salida, lo devuelve como una cadena y desactiva el búfer en un solo paso. Es la forma estándar de obtener la salida generada como una variable en lugar de enviarla directamente al navegador — útil para plantillas, almacenamiento en caché de fragmentos renderizados o el posprocesamiento de HTML antes de mostrarlo.

Esta página explica qué devuelve ob_get_clean(), en qué se diferencia de las funciones de búfer relacionadas y los patrones prácticos y errores comunes que encontrarás al usarla.

Qué hace ob_get_clean()

El almacenamiento en búfer de salida permite a PHP recopilar la salida (de echo, print, printf e incluso HTML en bruto entre ?> y <?php) en memoria en lugar de enviarla inmediatamente. Se activa con ob_start() y luego se captura o libera el contenido almacenado más adelante.

ob_get_clean() hace dos cosas a la vez:

  1. Obtener — devuelve el contenido actual del búfer de salida más interno como una cadena.
  2. Limpiar — descarta ese búfer y lo desactiva (equivalente a ob_get_contents() seguido de ob_end_clean()).

Como lee y elimina el búfer al mismo tiempo, ninguna de la salida capturada llega al navegador a menos que la envíes tú mismo con echo.

Sintaxis

ob_get_clean(): string|false

No recibe argumentos. Devuelve el contenido del búfer como una string si tiene éxito, o false si el almacenamiento en búfer de salida no está activo (es decir, no hay ningún búfer que leer).

Ejemplo básico

<?php

ob_start();                     // start buffering
echo "This will be buffered";   // captured, not printed
$output = ob_get_clean();       // grab it and stop buffering

echo strtoupper($output);       // now we control the output

Salida:

THIS WILL BE BUFFERED

La línea echo "This will be buffered" nunca llega al navegador por sí sola — se almacena en el búfer, se devuelve a $output y solo se muestra después de transformarla con strtoupper().

Un uso práctico: capturar una plantilla renderizada

Un uso habitual en el mundo real es renderizar un archivo de plantilla como cadena para poder devolverlo, almacenarlo en caché o enviarlo por correo electrónico:

<?php

function renderTemplate(string $file, array $data): string
{
    extract($data);          // turn array keys into local variables
    ob_start();
    include $file;           // the template's HTML/echo output is buffered
    return ob_get_clean();   // return it as a string
}

// Usage (assuming a greeting.php that echoes "Hello, $name!"):
// $html = renderTemplate('greeting.php', ['name' => 'Ada']);

Aquí el archivo incluido puede contener HTML normal y etiquetas <?= $name ?>; ob_get_clean() convierte el resultado renderizado completo en una cadena retornable en lugar de imprimirlo.

ob_get_clean() frente a funciones relacionadas

Función¿Devuelve contenido?¿Detiene el búfer?¿Envía al siguiente búfer/navegador?
ob_get_clean()No (descartado)
ob_get_contents()NoNo (el búfer sigue activo)
ob_end_clean()NoNo (descartado)
ob_get_flush()Sí (enviado)

Usa ob_get_clean() cuando quieras la salida capturada y no desees que se envíe automáticamente a ningún destino.

Errores comunes

  • Sin búfer activo → false. Llamar a ob_get_clean() sin un ob_start() correspondiente devuelve false y emite un aviso. Protégete con ob_get_level() o asegúrate de que el búfer está activo.
  • Solo afecta al búfer más interno. Los búferes se anidan. Si llamaste a ob_start() dos veces, ob_get_clean() cierra solo el más interno; el externo sigue activo.
  • La salida desaparece tras la llamada. Una vez limpiado, el búfer está vacío — llámalo una vez y guarda el resultado en una variable si lo necesitas más de una vez.
  • Comparación estricta para la vacuidad. Un búfer vacío devuelve "", no false. Usa === false para distinguir "sin búfer" de "el búfer estaba vacío".

Conclusión

ob_get_clean() es la función de referencia cuando necesitas la salida almacenada en búfer como una cadena y quieres que el almacenamiento en búfer se desactive a continuación, sin enviar nada al navegador. Se combina naturalmente con ob_start() y permite patrones como la renderización de plantillas y el almacenamiento en caché de salida. Para las operaciones relacionadas — mantener el búfer abierto, vaciarlo o simplemente descartarlo — consulta ob_get_contents(), ob_get_flush() y ob_end_clean().

Práctica

Práctica
¿Qué hace la función 'ob_get_clean()' en PHP?
¿Qué hace la función 'ob_get_clean()' en PHP?
Was this page helpful?