ob_get_level în PHP

Returnează câte buffere de ieșire sunt deschise, unul în altul.

Sintaxă
ob_get_level(): int

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.