W3docs

Funzione PHP ob_get_length(): tutto quello che devi sapere

Scopri come usare ob_get_length() in PHP per ottenere la lunghezza in byte del buffer di output attivo, con esempi pratici e casi d'uso comuni.

ob_get_length() restituisce il numero di byte attualmente presenti nel buffer di output attivo di PHP — il contenuto catturato da ob_start() ma non ancora inviato al browser. È utile quando si vuole misurare l'output generato prima di decidere cosa farne: imporre un limite di dimensione, costruire un'intestazione Content-Length, registrare la dimensione di un payload, o semplicemente verificare se è stato scritto qualcosa.

Questa pagina tratta la firma della funzione, il suo valore di ritorno, le insidie legate ai buffer annidati e alcuni schemi pratici.

Sintassi

ob_get_length(): int|false

La funzione non accetta argomenti. Restituisce:

  • un intero — la lunghezza in byte dei dati nel buffer di output attivo, oppure
  • false — se il buffering dell'output non è attivo (nessun buffer è stato avviato, o tutti sono già stati chiusi).

Poiché può restituire false, confronta sempre con === anziché un controllo generico se hai bisogno di distinguere "nessun buffer" da un buffer di lunghezza 0.

Un esempio di base

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

Qui ob_start() avvia il buffering, quindi echo scrive nel buffer invece di inviare al browser. ob_get_length() riporta 21 (la lunghezza in byte della stringa). ob_end_clean() poi scarta il contenuto del buffer — solo l'echo finale raggiunge l'output.

Nota che la lunghezza è misurata in byte, non in caratteri. Una stringa UTF-8 multibyte riporterà più byte rispetto ai caratteri visibili.

Rilevare se un buffer è attivo

Quando non è attivo alcun buffering, la funzione restituisce false:

<?php

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

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

Questo rende ob_get_length() un modo rapido per verificare "c'è qualcosa attualmente in buffering?" — strettamente correlato a ob_get_level(), che indica quanti buffer annidati sono aperti.

Buffer annidati: viene misurato solo quello attivo

I buffer PHP possono essere impilati. ob_get_length() riporta sempre la lunghezza del buffer più esterno (interno, attualmente attivo) — mai il totale combinato:

<?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 hai bisogno del quadro completo, esamina ogni livello con ob_get_level() e rimuovi i buffer uno alla volta.

Uno schema pratico: saltare l'output vuoto

Un uso comune è evitare di emettere qualsiasi cosa (e il costo del lavoro correlato) quando un frammento bufferizzato risulta vuoto:

<?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();
}

Per leggere i byte bufferizzati stessi invece della sola loro lunghezza, usa ob_get_contents(); per ottenere il contenuto e chiudere il buffer in una sola chiamata, usa ob_get_clean().

Conclusione

ob_get_length() riporta la lunghezza in byte del buffer di output attivo di PHP, o false quando nessun buffer è aperto. Ricorda tre cose: conta i byte, misura solo il buffer attivo in uno stack annidato, e un ritorno false significa che il buffering è disattivato. Combinata con il resto delle funzioni di controllo dell'outputob_get_contents(), ob_get_clean() e ob_get_level() — ti permette di misurare e gestire con precisione l'output generato prima che raggiunga il browser.

Esercizio

Pratica
Qual è la funzione di ob_get_length() in PHP?
Qual è la funzione di ob_get_length() in PHP?
Was this page helpful?