W3docs

Função PHP ob_get_clean(): Tudo o Que Você Precisa Saber

Aprenda como a função ob_get_clean() do PHP captura o conteúdo do buffer de saída e encerra o buffer em uma única etapa.

A função ob_get_clean() captura tudo o que o PHP escreveu no buffer de saída, retorna como string e desativa o buffer em uma única operação. É a maneira padrão de obter a saída gerada como variável, em vez de enviá-la diretamente ao navegador — útil para criação de templates, cache de fragmentos renderizados ou pós-processamento de HTML antes de exibi-lo.

Esta página aborda o que ob_get_clean() retorna, como ela difere das funções de buffer relacionadas e os padrões práticos e armadilhas que você encontrará ao utilizá-la.

O que ob_get_clean() Faz

O buffer de saída permite que o PHP colete a saída (de echo, print, printf e até HTML bruto entre ?> e <?php) na memória em vez de enviá-la imediatamente. Você o ativa com ob_start() e, em seguida, captura ou libera o conteúdo em buffer posteriormente.

ob_get_clean() faz duas coisas ao mesmo tempo:

  1. Get — retorna o conteúdo atual do buffer de saída mais interno como string.
  2. Clean — descarta esse buffer e o desativa (equivalente a ob_get_contents() seguido de ob_end_clean()).

Por capturar e remover o buffer ao mesmo tempo, nenhuma saída capturada chega ao navegador a menos que você a exiba manualmente.

Sintaxe

ob_get_clean(): string|false

Não recebe argumentos. Retorna o conteúdo do buffer como string em caso de sucesso, ou false se o buffer de saída não estiver ativo (ou seja, não há buffer para leitura).

Exemplo 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

Saída:

THIS WILL BE BUFFERED

A linha echo "This will be buffered" nunca chega ao navegador por conta própria — ela é armazenada no buffer, retornada para $output e exibida apenas depois de ser transformada com strtoupper().

Uso Prático: Capturando um Template Renderizado

Um uso comum no mundo real é renderizar um arquivo de template como string para retorná-lo, armazená-lo em cache ou enviá-lo por e-mail:

<?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']);

Aqui o arquivo incluído pode conter HTML comum e tags <?= $name ?>; ob_get_clean() transforma todo o resultado renderizado em uma string retornável, em vez de imprimi-lo.

ob_get_clean() vs. Funções Relacionadas

FunçãoRetorna conteúdo?Encerra buffer?Envia ao próximo buffer/navegador?
ob_get_clean()SimSimNão (descartado)
ob_get_contents()SimNãoNão (buffer permanece ativo)
ob_end_clean()NãoSimNão (descartado)
ob_get_flush()SimSimSim (enviado)

Use ob_get_clean() quando quiser a saída capturada e não quiser que ela seja enviada automaticamente.

Armadilhas Comuns

  • Sem buffer ativo → false. Chamar ob_get_clean() sem um ob_start() correspondente retorna false e emite um aviso. Proteja-se com ob_get_level() ou certifique-se de que o buffer esteja ativo.
  • Afeta apenas o buffer mais interno. Buffers podem ser aninhados. Se você chamou ob_start() duas vezes, ob_get_clean() fecha apenas o mais interno; o buffer externo ainda estará ativo.
  • A saída é perdida após a chamada. Uma vez limpo, o buffer fica vazio — chame a função uma vez e armazene o resultado em uma variável se precisar utilizá-lo mais de uma vez.
  • Comparação estrita para verificar vazio. Um buffer vazio retorna "", não false. Use === false para distinguir "sem buffer" de "buffer estava vazio".

Conclusão

ob_get_clean() é a função ideal quando você precisa da saída em buffer como string e deseja que o buffering seja desativado em seguida, sem enviar nada ao navegador. Ela se combina naturalmente com ob_start() e viabiliza padrões como renderização de templates e cache de saída. Para as operações relacionadas — manter o buffer aberto, enviá-lo ou simplesmente descartá-lo — consulte ob_get_contents(), ob_get_flush() e ob_end_clean().

Prática

Prática
O que a função 'ob_get_clean()' do PHP faz?
O que a função 'ob_get_clean()' do PHP faz?
Was this page helpful?