Função PHP ob_get_flush(): Tudo o Que Você Precisa Saber
Saiba como a função ob_get_flush() do PHP recupera o conteúdo do buffer de saída e o envia ao mesmo tempo, com exemplos práticos.
Como desenvolvedor PHP, talvez você precise recuperar o conteúdo do buffer de saída e liberá-lo ao mesmo tempo. A função ob_get_flush() é uma função nativa do PHP que faz as duas coisas em uma única chamada: ela retorna o conteúdo atual do buffer como uma string e o envia para o próximo nível de saída. Este artigo explica como ela funciona, o que retorna e quando utilizá-la em vez das outras funções de controle de saída.
O Que É a Função ob_get_flush()?
O buffering de saída permite que o PHP colete tudo o que você imprime com echo ou print na memória, em vez de enviar diretamente ao navegador. Você inicia um buffer com ob_start(), escreve normalmente e depois decide o que fazer com a saída capturada.
ob_get_flush() realiza três ações em um único passo:
- Obtém o conteúdo do buffer de saída ativo (o do topo) e o retorna como uma string.
- Libera esse conteúdo — envia-o para o próximo nível de buffer ou para o navegador, caso não exista outro nível.
- Fecha esse nível de buffer (um nível de aninhamento é removido).
Isso a torna uma combinação prática de ob_get_contents() (leitura) e ob_end_flush() (envio + fechamento).
Sintaxe
ob_get_flush(): string|falseParâmetros
ob_get_flush() não aceita nenhum parâmetro.
Valor de Retorno
A função retorna o conteúdo do buffer de saída do topo como uma string. Se o buffering de saída não estiver ativo (não há buffer para liberar), ela retorna false e gera um aviso. Sempre inicie um buffer com ob_start() antes de chamá-la.
Como Usar a Função ob_get_flush()
O padrão é: iniciar um buffer, escrever nele e, em seguida, chamar ob_get_flush() para capturar e liberá-lo.
<?php
ob_start();
echo "This will be buffered";
// Capture the buffer, flush it to the browser, and close the level.
$output = ob_get_flush();
echo "\nCaptured copy: " . $output;Saída:
This will be buffered
Captured copy: This will be bufferedAqui, "This will be buffered" é coletado no buffer em vez de ser impresso imediatamente. ob_get_flush() retorna esse texto (para que $output agora o contenha) e, ao mesmo tempo, o envia ao navegador — é por isso que a frase aparece duas vezes: uma vez pelo flush e outra pelo echo final.
Se o buffering não estiver ativo quando você a chamar, você receberá false de volta:
<?php
$output = ob_get_flush(); // No ob_start() was called
var_dump($output); // bool(false)ob_get_flush() vs. funções relacionadas
| Função | Retorna o conteúdo? | Envia para a saída? | Fecha o buffer? |
|---|---|---|---|
ob_get_flush() | Sim (string) | Sim | Sim |
ob_end_flush() | Não (bool) | Sim | Sim |
ob_get_clean() | Sim (string) | Não (descartado) | Sim |
ob_get_contents() | Sim (string) | Não | Não |
Escolha ob_get_flush() quando quiser tanto manter uma cópia da saída armazenada em buffer (para registrar, inspecionar ou modificar) quanto ainda enviá-la ao navegador. Se precisar apenas enviá-la, use ob_end_flush(); se quiser capturá-la sem enviar, use ob_get_clean().
Conclusão
A função ob_get_flush() recupera o buffer de saída ativo como uma string enquanto o libera e fecha em uma única chamada. Ao entender sua lista de parâmetros vazia, seu valor de retorno string|false e seu comportamento de fechamento de buffer, você pode gerenciar fluxos de saída com mais precisão. Para se aprofundar, explore ob_start() para abrir buffers, ob_get_level() para verificar a profundidade de aninhamento e ob_flush() para liberar sem fechar.