Ce face ob_get_level
Fiecare ob_start deschide un buffer nou peste cel existent. ob_get_level spune câte sunt deschise acum: 0 înseamnă niciunul. Pe unele servere, setarea output_buffering din php.ini deschide deja unul la pornire.
Este folosit pentru a închide sigur toate bufferele, de exemplu înainte de a trimite un fișier mare.
Ce returnează
Numărul de buffere deschise.
Exemple
Exemplul 1: Buffere unul în altul
Afișăm nivelurile la final, după ce toate bufferele sunt închise.
<?php
$niveluri = [ob_get_level()];
ob_start();
$niveluri[] = ob_get_level();
ob_start();
$niveluri[] = ob_get_level();
ob_end_clean();
ob_end_clean();
$niveluri[] = ob_get_level();
echo implode(" → ", $niveluri);
Rezultat
0 → 1 → 2 → 0
Exemplul 2: Închiderea tuturor bufferelor
<?php
ob_start();
ob_start();
echo "text vechi";
while (ob_get_level() > 0) {
ob_end_clean();
}
echo "Toate bufferele sunt închise: nivel " . ob_get_level();
Rezultat
Toate bufferele sunt închise: nivel 0
Greșeli frecvente
- Scrii
while (ob_get_level()) ob_end_clean();într-un cod care rulează sub un framework. Poți închide și bufferele deschise de el. Închide doar câte ai deschis tu.
Comenzi înrudite
ob_start / ob_get_clean / ob_end_flush: Pornește un buffer: tot ce afișezi după el este păstrat în memorie în loc să fie trimis imediat.ob_end_clean: Aruncă tot conținutul bufferului de ieșire curent și îl închide.ob_get_status: Returnează informații despre bufferul de ieșire curent sau despre toate bufferele.