W3docs

Função ob_get_length() do PHP: Tudo o que Você Precisa Saber

Aprenda como usar a função ob_get_length() do PHP para obter o comprimento do buffer de saída ativo, com exemplos práticos e dicas de uso.

ob_get_length() retorna o número de bytes atualmente armazenados no buffer de saída ativo do PHP — o conteúdo que foi capturado por ob_start() mas ainda não enviado ao navegador. É útil quando você deseja medir a saída gerada antes de decidir o que fazer com ela: impor um limite de tamanho, construir um cabeçalho Content-Length, registrar o tamanho de um payload, ou simplesmente verificar se algo já foi escrito.

Esta página cobre a assinatura da função, seu valor de retorno, as armadilhas com buffers aninhados e alguns padrões práticos.

Sintaxe

ob_get_length(): int|false

A função não recebe nenhum argumento. Ela retorna:

  • um inteiro — o comprimento em bytes dos dados no buffer de saída ativo, ou
  • false — se o buffer de saída não estiver ativo (nenhum buffer foi iniciado, ou todos já foram fechados).

Como pode retornar false, sempre compare com === em vez de uma verificação solta se você precisar distinguir "sem buffer" de um buffer de comprimento 0.

Um exemplo 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

Aqui ob_start() inicia o buffer, de modo que echo escreve no buffer em vez de ir para o navegador. ob_get_length() retorna 21 (o comprimento em bytes da string). ob_end_clean() descarta o conteúdo do buffer — apenas o echo final chega à saída.

Note que o comprimento é medido em bytes, não em caracteres. Uma string UTF-8 multibyte reportará mais bytes do que tem caracteres visíveis.

Detectando se um buffer está ativo

Quando nenhum buffer está em efeito, a função retorna false:

<?php

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

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

Isso torna ob_get_length() uma forma rápida de testar "há algo sendo bufferizado atualmente?" — intimamente relacionado a ob_get_level(), que informa quantos buffers aninhados estão abertos.

Buffers aninhados: apenas o ativo é medido

Os buffers do PHP podem ser empilhados. ob_get_length() sempre reporta o comprimento do buffer mais externo (mais interno, atualmente ativo) — nunca o 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

Se você precisar do quadro completo, inspecione cada nível com ob_get_level() e remova os buffers um a um.

Um padrão prático: ignorar saída vazia

Um uso comum é evitar emitir qualquer coisa (e a sobrecarga de trabalho relacionado) quando um fragmento bufferizado acabou vazio:

<?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 ler os bytes bufferizados em vez de apenas seu comprimento, use ob_get_contents(); para capturar o conteúdo e fechar o buffer em uma única chamada, use ob_get_clean().

Conclusão

ob_get_length() reporta o comprimento em bytes do buffer de saída ativo do PHP, ou false quando nenhum buffer está aberto. Lembre-se de três coisas: conta bytes, mede apenas o buffer ativo em uma pilha aninhada, e um retorno false significa que o buffer está desativado. Combinada com o restante das funções de controle de saídaob_get_contents(), ob_get_clean() e ob_get_level() — ela permite medir e gerenciar a saída gerada com precisão antes que chegue ao navegador.

Prática

Prática
Qual é a função de ob_get_length() no PHP?
Qual é a função de ob_get_length() no PHP?
Was this page helpful?