W3docs

Funzione PHP ob_get_clean(): tutto quello che devi sapere

Scopri come usare ob_get_clean() in PHP per ottenere il contenuto del buffer di output e disattivare il buffering in un solo passaggio.

La funzione ob_get_clean() cattura tutto ciò che PHP ha scritto nel buffer di output, lo restituisce come stringa e disattiva il buffer in un unico passaggio. È il metodo standard per ottenere l'output generato come variabile invece di inviarlo direttamente al browser — utile per il templating, la memorizzazione nella cache di un frammento renderizzato o la post-elaborazione dell'HTML prima che venga visualizzato.

Questa pagina spiega cosa restituisce ob_get_clean(), come si differenzia dalle funzioni buffer correlate, e i pattern pratici e le insidie che incontrerai quando la usi.

Cosa fa ob_get_clean()

Il buffering dell'output permette a PHP di raccogliere l'output (da echo, print, printf, anche HTML grezzo tra ?> e <?php) in memoria invece di inviarlo immediatamente. Lo si attiva con ob_start() e poi si cattura o si rilascia il contenuto bufferizzato in seguito.

ob_get_clean() fa due cose contemporaneamente:

  1. Get — restituisce il contenuto corrente del buffer di output più esterno come stringa.
  2. Clean — elimina quel buffer e lo disattiva (equivalente a ob_get_contents() seguito da ob_end_clean()).

Poiché legge e rimuove il buffer allo stesso tempo, nessuno dell'output catturato raggiunge il browser a meno che non lo fai con echo tu stesso.

Sintassi

ob_get_clean(): string|false

Non accetta argomenti. Restituisce il contenuto del buffer come string in caso di successo, oppure false se il buffering dell'output non è attivo (cioè non c'è nessun buffer da leggere).

Esempio Base

<?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

Output:

THIS WILL BE BUFFERED

La riga echo "This will be buffered" non raggiunge mai il browser da sola — viene memorizzata nel buffer, restituita in $output e visualizzata solo dopo averla trasformata con strtoupper().

Un Uso Pratico: Catturare un Template Renderizzato

Un uso comune nel mondo reale è renderizzare un file template in una stringa per poterla restituire, memorizzare nella cache o inviare via email:

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

Qui il file incluso può contenere HTML ordinario e tag <?= $name ?>; ob_get_clean() trasforma l'intero risultato renderizzato in una stringa restituibile invece di stamparlo.

ob_get_clean() vs. Funzioni Correlate

FunzioneRestituisce il contenuto?Interrompe il buffering?Invia al buffer successivo/browser?
ob_get_clean()No (scartato)
ob_get_contents()NoNo (il buffer rimane attivo)
ob_end_clean()NoNo (scartato)
ob_get_flush()Sì (inviato)

Usa ob_get_clean() quando vuoi l'output catturato e non vuoi che venga inviato da nessuna parte automaticamente.

Insidie Comuni

  • Nessun buffer attivo → false. Chiamare ob_get_clean() senza un corrispondente ob_start() restituisce false ed emette un avviso. Proteggi con ob_get_level() o assicurati che il buffering sia attivo.
  • Interessa solo il buffer più interno. I buffer si annidano. Se hai chiamato ob_start() due volte, ob_get_clean() chiude solo quello più interno; il buffer esterno è ancora attivo.
  • L'output sparisce dopo la chiamata. Una volta pulito, il buffer è vuoto — chiamalo una volta sola e salva il risultato in una variabile se ne hai bisogno più di una volta.
  • Confronto rigoroso per verificare il vuoto. Un buffer vuoto restituisce "", non false. Usa === false per distinguere "nessun buffer" da "il buffer era vuoto".

Conclusione

ob_get_clean() è la funzione da usare quando hai bisogno dell'output bufferizzato come stringa e vuoi che il buffering venga disattivato in seguito, senza inviare nulla al browser. Si abbina naturalmente con ob_start() e alimenta pattern come il rendering di template e la memorizzazione nella cache dell'output. Per le operazioni correlate — mantenere il buffer aperto, inviarlo o semplicemente scartarlo — consulta ob_get_contents(), ob_get_flush() e ob_end_clean().

Pratica

Pratica
Cosa fa la funzione 'ob_get_clean()' in PHP?
Cosa fa la funzione 'ob_get_clean()' in PHP?
Was this page helpful?