W3docs

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

Aprende a usar ob_get_length() en PHP para obtener el tamaño en bytes del búfer de salida activo y gestionar la salida antes de enviarla al navegador.

ob_get_length() devuelve el número de bytes que se encuentran actualmente en el búfer de salida activo de PHP — el contenido que ha sido capturado por ob_start() pero que aún no se ha enviado al navegador. Es muy útil cuando quieres medir la salida generada antes de decidir qué hacer con ella: imponer un límite de tamaño, construir una cabecera Content-Length, registrar el tamaño de un payload, o simplemente comprobar si se ha escrito algo.

Esta página cubre la firma de la función, su valor de retorno, las particularidades con búferes anidados y algunos patrones prácticos.

Sintaxis

ob_get_length(): int|false

La función no acepta ningún argumento. Retorna:

  • un entero — la longitud en bytes de los datos en el búfer de salida activo, o
  • false — si el búfer de salida no está activo (no se ha iniciado ningún búfer, o todos ya han sido cerrados).

Dado que puede retornar false, compara siempre con === en lugar de una comparación laxa si necesitas distinguir "sin búfer" de un búfer de longitud 0.

Un ejemplo básico

<?php

ob_start();
echo "This will be buffered";   // 21 bytes
$length = ob_get_length();
ob_end_clean();                 // discard the buffer

echo "Buffered length was: $length"; // Buffered length was: 21

Aquí ob_start() inicia el almacenamiento en búfer, por lo que echo escribe en el búfer en lugar de enviarlo al navegador. ob_get_length() reporta 21 (la longitud en bytes de la cadena). ob_end_clean() descarta el contenido del búfer — solo el echo final llega a la salida.

Ten en cuenta que la longitud se mide en bytes, no en caracteres. Una cadena UTF-8 multibyte reportará más bytes de los que tiene caracteres visibles.

Detectar si un búfer está activo

Cuando no hay ningún búfer en efecto, la función retorna false:

<?php

var_dump(ob_get_length()); // bool(false)

ob_start();
echo "hi";
var_dump(ob_get_length()); // int(2)
ob_end_clean();

Esto hace que ob_get_length() sea una forma rápida de comprobar "¿se está almacenando algo en el búfer?" — estrechamente relacionada con ob_get_level(), que indica cuántos búferes anidados están abiertos.

Búferes anidados: solo se mide el activo

Los búferes de PHP pueden apilarse. ob_get_length() siempre reporta la longitud del búfer más alto (el más interno, el activo actualmente) — nunca el total combinado:

<?php

ob_start();
echo "outer";              // 5 bytes in the outer buffer

ob_start();
echo "inner text";         // 10 bytes in the inner buffer
$inner = ob_get_length();  // measures the active (inner) buffer
ob_end_clean();            // discard inner

$outer = ob_get_length();  // outer is active again
ob_end_clean();            // discard outer

echo "inner=$inner outer=$outer"; // inner=10 outer=5

Si necesitas una visión completa, inspecciona cada nivel con ob_get_level() y ve eliminando los búferes uno a uno.

Un patrón práctico: omitir salida vacía

Un uso habitual es evitar emitir cualquier cosa (y el coste de trabajo relacionado) cuando un fragmento almacenado en búfer resultó estar vacío:

<?php

ob_start();
// ... template / partial that may or may not produce output ...

if (ob_get_length() > 0) {
    // there is real content — send it
    ob_end_flush();
} else {
    // nothing was generated — drop the empty buffer
    ob_end_clean();
}

Para leer los bytes almacenados en el búfer en lugar de solo su longitud, usa ob_get_contents(); para obtener el contenido y cerrar el búfer en una sola llamada, utiliza ob_get_clean().

Conclusión

ob_get_length() reporta la longitud en bytes del búfer de salida activo de PHP, o false cuando no hay ningún búfer abierto. Recuerda tres cosas: cuenta bytes, mide solo el búfer activo en una pila anidada, y un retorno de false significa que el almacenamiento en búfer está desactivado. Combinada con el resto de las funciones de control de salidaob_get_contents(), ob_get_clean() y ob_get_level() — te permite medir y gestionar la salida generada con precisión antes de que llegue al navegador.

Práctica

Práctica
¿Cuál es la función de ob_get_length() en PHP?
¿Cuál es la función de ob_get_length() en PHP?
Was this page helpful?