W3docs

Funzione PHP ob_get_contents(): tutto quello che devi sapere

Scopri come usare ob_get_contents() in PHP per leggere il contenuto del buffer di output senza svuotarlo, con esempi pratici e casi d'uso.

Normalmente, quando uno script esegue echo o print, PHP invia il contenuto direttamente al browser. Il buffering dell'output consente di intercettare quell'output e tenerlo in memoria, in modo da poterlo catturare, modificare o scartare prima che raggiunga il client. La funzione ob_get_contents() è lo strumento che permette di leggere ciò che si trova attualmente in quel buffer.

Questo capitolo spiega cosa restituisce ob_get_contents(), quando usarla, le insidie a cui prestare attenzione e come si inserisce accanto alle altre funzioni di controllo dell'output.

Cosa fa ob_get_contents()

ob_get_contents() restituisce il contenuto del buffer di output attivo senza svuotarlo né interrompere il buffering. Il buffer continua a raccogliere output, quindi è possibile chiamare la funzione più volte per vedere cosa è stato accumulato finora.

Funziona solo mentre è attivo un buffer avviato da ob_start(). Se non è presente alcun buffer attivo, restituisce false.

Sintassi

ob_get_contents(): string|false
  • Parametri: nessuno.
  • Valore restituito: il contenuto attuale del buffer come stringa, oppure false se il buffering dell'output non è attivo.

Un esempio di base

<?php

ob_start();                       // 1. Start capturing output
echo "This will be buffered";     // 2. Goes into the buffer, not the screen
$output = ob_get_contents();      // 3. Read the buffer into a variable
ob_end_clean();                   // 4. Discard the buffer and stop buffering

echo "Captured: " . $output;

Questo stampa:

Captured: This will be buffered

Qui ob_start() avvia il buffering, quindi l'echo viene tenuto in memoria anziché inviato al browser. ob_get_contents() copia quel testo in $output. Infine ob_end_clean() elimina il buffer e disattiva il buffering — senza di esso, il testo bufferizzato verrebbe comunque inviato alla pagina.

ob_get_contents() non svuota il buffer

Un punto di confusione comune: la lettura del buffer lo lascia intatto. L'output è ancora lì e verrà inviato al browser al termine del buffering (a meno che non venga pulito).

<?php

ob_start();
echo "Hello";
$first = ob_get_contents();   // "Hello"
echo " World";
$second = ob_get_contents();  // "Hello World" — the buffer kept growing
ob_end_flush();               // sends "Hello World" to the browser

var_dump($first, $second);

Questo produce:

Hello World
string(5) "Hello"
string(11) "Hello World"

Se invece vuoi leggere e cancellare il buffer in un solo passaggio, usa ob_get_clean().

Quando usarla?

  • Catturare l'output renderizzato. Renderizza un template o includi un file, quindi ottieni il risultato come stringa invece di stamparlo — utile per email, caching o generazione di file.
  • Post-elaborazione dell'HTML. Bufferizza una pagina, leggila con ob_get_contents(), applica una trasformazione (minificazione, sostituzione di segnaposto), poi restituisci il risultato.
  • Sopprimere o ispezionare l'output di una funzione o libreria che stampa direttamente.
<?php

function renderGreeting(string $name): void
{
    echo "<p>Hello, {$name}!</p>";
}

ob_start();
renderGreeting("Ada");
$html = ob_get_contents();   // capture instead of printing
ob_end_clean();

$html = str_replace("Hello", "Welcome", $html);
echo $html;

Questo produce:

<p>Welcome, Ada!</p>

Insidie

  • Restituisce false, non una stringa vuota, quando non è attivo alcun buffer. Usa un controllo rigoroso (=== false) se devi distinguere "nessun buffer" da "buffer vuoto".
  • Buffer annidati: ob_get_contents() legge solo il livello di buffer più interno (corrente). Per vedere quanti buffer sono impilati, usa ob_get_level().
  • Non interrompe il buffering. Abbinala a ob_end_clean() o ob_end_flush() quando hai finito.

Funzioni correlate

Conclusione

ob_get_contents() legge il buffer di output corrente come stringa senza svuotarlo né terminare il buffering. È il blocco fondamentale per catturare l'output renderizzato, post-elaborare l'HTML e sopprimere l'output diretto. Ricorda che restituisce false quando non è attivo alcun buffer, e che lascia il buffer intatto — usa ob_get_clean() quando vuoi leggere e svuotare in un'unica operazione.

Esercitazione

Pratica
Quale funzione in PHP può essere usata per leggere il contenuto del buffer di output?
Quale funzione in PHP può essere usata per leggere il contenuto del buffer di output?
Was this page helpful?