W3docs

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

Aprende a usar ob_end_clean() en PHP para descartar el buffer de salida y detener el almacenamiento en buffer. Sintaxis, valores de retorno y ejemplos.

Cuando PHP se ejecuta con almacenamiento en buffer de salida, todo lo que tu script imprime con echo se recopila en un buffer en memoria en lugar de enviarse directamente al navegador. A veces querrás descartar esa salida capturada y detener el almacenamiento en buffer por completo — por ejemplo, después de capturar algo solo para inspeccionarlo, o cuando un error significa que la respuesta a medio construir nunca debería llegar al usuario. Eso es exactamente lo que hace ob_end_clean(). Esta página cubre su sintaxis, valor de retorno, casos de uso comunes y cómo se diferencia de las funciones ob_* relacionadas.

¿Qué es la función ob_end_clean()?

ob_end_clean() hace dos cosas en una sola llamada al buffer de salida más alto (el iniciado más recientemente):

  1. Descarta su contenido actual — la salida almacenada en buffer se elimina, no se envía.
  2. Desactiva ese nivel de almacenamiento en buffer — el buffer se cierra y se elimina de la pila.

La función existe desde PHP 4. El nombre se descompone como output buffer (ob) — end — clean: "end" significa cerrar el nivel del buffer, "clean" significa descartar el contenido (a diferencia de "flush", que lo envía).

Sintaxis

ob_end_clean(): bool

No acepta argumentos y devuelve un booleano.

Valor de retorno y manejo de errores

SituaciónResultado
Un buffer estaba activo y se cerró con éxitodevuelve true
No hay buffer de salida activodevuelve false y emite un E_NOTICE
El buffer no puede eliminarse (p. ej., el manejador lo prohíbe)devuelve false

Dado que advierte cuando no hay ningún buffer activo, protege la llamada con ob_get_level() cuando no estás seguro de que haya uno abierto:

<?php
if (ob_get_level() > 0) {
    ob_end_clean();
}
?>

Ejemplo básico

<?php
ob_start();                 // Start buffering
echo "This will be thrown away";
ob_end_clean();             // Discard the buffer, stop buffering

echo "Only this line reaches the browser";
?>

Salida:

Only this line reaches the browser

El primer echo nunca aparece: ob_end_clean() eliminó el buffer que contenía "This will be thrown away".

¿Cuándo lo usaría?

  • Suprimir salida no deseada de una función, librería o plantilla que no controlas, para que no pueda corromper la respuesta.
  • Descartar una página a medio renderizar cuando ocurre un error o una redirección a mitad del proceso, para que el usuario reciba una respuesta limpia en lugar de una rota.
  • Capturar y descartar salida durante pruebas o mediciones (por ejemplo, para medir cuánto tarda un renderizado sin imprimirlo realmente).
<?php
ob_start();
try {
    render_complex_page();          // emits lots of output
    throw new RuntimeException('boom');
} catch (Throwable $e) {
    ob_end_clean();                 // drop the partial page
    http_response_code(500);
    echo "Sorry, something went wrong.";
}
?>

ob_end_clean() vs. funciones relacionadas

La familia ob_* se divide en dos ejes — clean vs. flush (descartar vs. enviar) y end vs. get (cerrar el buffer vs. mantenerlo abierto / devolver una cadena):

Función¿Envía el buffer?¿Cierra el buffer?¿Devuelve el contenido?
ob_end_clean()NoNo
ob_end_flush()No
ob_get_clean()NoSí (como string)
ob_clean()NoNo (sigue almacenando en buffer)No

Si necesitas el texto descartado como string, usa ob_get_clean() en lugar de ob_end_clean(). Para enviar el buffer en vez de descartarlo, usa ob_end_flush(). Todas estas funciones requieren un buffer previamente abierto con ob_start().

Buffers anidados

Los buffers de salida forman una pila. ob_end_clean() solo afecta al buffer más interno; los buffers exteriores permanecen intactos. Cada nivel necesita su propia llamada para cerrarse:

<?php
ob_start();           // level 1
echo "outer ";
ob_start();           // level 2
echo "inner";
ob_end_clean();       // drops "inner", level 1 still open
echo " world";
ob_end_flush();       // sends "outer  world"
?>

Salida:

outer  world

Conclusión

ob_end_clean() descarta el contenido del buffer de salida activo y cierra ese nivel de almacenamiento en buffer, devolviendo true en caso de éxito. Úsala para descartar salida que nunca quieras enviar — y recurre a ob_get_clean(), ob_end_flush() o ob_clean() cuando en su lugar necesites el contenido, quieras enviarlo o quieras seguir almacenando en buffer. Consulta la descripción general del control de salida de PHP para obtener el panorama completo.

Práctica

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