W3docs

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

Aprende a usar ob_get_contents() en PHP para leer el contenido del búfer de salida sin vaciarlo ni detener el almacenamiento en búfer.

Normalmente, cuando tu script usa echo o print, PHP envía el resultado directamente al navegador. El almacenamiento en búfer de salida te permite interceptar esa salida y mantenerla en memoria, para que puedas capturarla, modificarla o descartarla antes de que llegue al cliente. La función ob_get_contents() es la herramienta que te permite leer lo que hay actualmente en ese búfer.

Este capítulo explica qué devuelve ob_get_contents(), cuándo usarla, los errores comunes a evitar y cómo encaja junto a las demás funciones de control de salida.

Qué hace ob_get_contents()

ob_get_contents() devuelve el contenido del búfer de salida activo sin vaciarlo ni detener el almacenamiento en búfer. El búfer sigue acumulando salida, por lo que puedes llamar a la función varias veces para ver lo que se ha acumulado hasta el momento.

Solo funciona mientras haya un búfer iniciado por ob_start() activo. Si no hay ningún búfer activo, devuelve false.

Sintaxis

ob_get_contents(): string|false
  • Parámetros: ninguno.
  • Valor de retorno: el contenido actual del búfer como string, o false si el almacenamiento en búfer de salida no está activo.

Un ejemplo básico

<?php

ob_start();                       // 1. Start capturing output
echo "This will be buffered";     // 2. Goes into the buffer, not the screen
$output = ob_get_contents();      // 3. Read the buffer into a variable
ob_end_clean();                   // 4. Discard the buffer and stop buffering

echo "Captured: " . $output;

Esto imprime:

Captured: This will be buffered

Aquí ob_start() inicia el almacenamiento en búfer, por lo que el echo se mantiene en memoria en lugar de enviarse al navegador. ob_get_contents() copia ese texto en $output. Finalmente, ob_end_clean() descarta el búfer y desactiva el almacenamiento en búfer — sin él, el texto almacenado en el búfer todavía se enviaría a la página.

ob_get_contents() no vacía el búfer

Un punto de confusión habitual: leer el búfer no lo modifica. La salida sigue ahí y se enviará al navegador cuando termine el almacenamiento en búfer (a menos que la limpies).

<?php

ob_start();
echo "Hello";
$first = ob_get_contents();   // "Hello"
echo " World";
$second = ob_get_contents();  // "Hello World" — the buffer kept growing
ob_end_flush();               // sends "Hello World" to the browser

var_dump($first, $second);

Esto muestra:

Hello World
string(5) "Hello"
string(11) "Hello World"

Si en cambio quieres leer y borrar el búfer en un solo paso, usa ob_get_clean().

¿Cuándo usaría esto?

  • Capturar salida renderizada. Renderiza una plantilla o incluye un archivo, y luego obtén el resultado como string en lugar de imprimirlo — útil para correos electrónicos, caché o generación de archivos.
  • Post-procesamiento de HTML. Almacena una página en el búfer, léela con ob_get_contents(), aplica una transformación (minificar, reemplazar marcadores de posición) y luego muestra el resultado.
  • Suprimir o inspeccionar la salida de una función o librería que imprime directamente.
<?php

function renderGreeting(string $name): void
{
    echo "<p>Hello, {$name}!</p>";
}

ob_start();
renderGreeting("Ada");
$html = ob_get_contents();   // capture instead of printing
ob_end_clean();

$html = str_replace("Hello", "Welcome", $html);
echo $html;

Esto muestra:

<p>Welcome, Ada!</p>

Errores comunes

  • Devuelve false, no un string vacío, cuando no hay ningún búfer activo. Usa una comprobación estricta (=== false) si necesitas distinguir "sin búfer" de "búfer vacío".
  • Búferes anidados: ob_get_contents() lee solo el nivel de búfer más interno (actual). Para ver cuántos búferes están apilados, usa ob_get_level().
  • No detiene el almacenamiento en búfer. Combínala con ob_end_clean() o ob_end_flush() cuando hayas terminado.

Funciones relacionadas

Conclusión

ob_get_contents() lee el búfer de salida actual como string sin vaciarlo ni finalizar el almacenamiento en búfer. Es el bloque fundamental para capturar salida renderizada, post-procesar HTML y suprimir salida directa. Recuerda que devuelve false cuando no hay ningún búfer activo, y que deja el búfer intacto — recurre a ob_get_clean() cuando quieras leer y limpiar en un solo movimiento.

Práctica

Práctica
¿Qué función en PHP se puede usar para leer el contenido del búfer de salida?
¿Qué función en PHP se puede usar para leer el contenido del búfer de salida?
Was this page helpful?