W3docs

PHP ob_get_length() Funktion: Alles, was Sie wissen müssen

Die PHP-Funktion ob_get_length() gibt die Länge des aktiven Ausgabepuffers in Bytes zurück oder false, wenn kein Puffer aktiv ist.

ob_get_length() gibt die Anzahl der Bytes zurück, die sich aktuell im aktiven Ausgabepuffer von PHP befinden — also den Inhalt, der von ob_start() erfasst, aber noch nicht an den Browser gesendet wurde. Die Funktion ist nützlich, wenn Sie die generierte Ausgabe messen möchten, bevor Sie entscheiden, was damit geschehen soll: eine Größenbeschränkung durchsetzen, einen Content-Length-Header erstellen, eine Nutzlastgröße protokollieren oder einfach prüfen, ob bereits etwas geschrieben wurde.

Diese Seite behandelt die Signatur der Funktion, ihren Rückgabewert, die Tücken bei verschachtelten Puffern sowie einige praktische Muster.

Syntax

ob_get_length(): int|false

Die Funktion erwartet keine Argumente. Sie gibt zurück:

  • einen Integer — die Länge der Daten im aktiven Ausgabepuffer in Bytes, oder
  • false — wenn die Ausgabepufferung nicht aktiv ist (kein Puffer wurde gestartet oder alle wurden bereits geschlossen).

Da die Funktion false zurückgeben kann, sollten Sie immer === für den Vergleich verwenden statt einer losen Prüfung, wenn Sie zwischen „kein Puffer" und einem Puffer der Länge 0 unterscheiden möchten.

Ein einfaches Beispiel

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

Hier beginnt ob_start() die Pufferung, sodass echo in den Puffer schreibt statt in den Browser. ob_get_length() gibt 21 zurück (die Bytelänge des Strings). ob_end_clean() verwirft anschließend den gepufferten Inhalt — nur das abschließende echo erreicht die Ausgabe.

Beachten Sie, dass die Länge in Bytes gemessen wird, nicht in Zeichen. Ein mehrbytiger UTF-8-String meldet mehr Bytes als er sichtbare Zeichen hat.

Erkennen, ob ein Puffer aktiv ist

Wenn keine Pufferung aktiv ist, gibt die Funktion false zurück:

<?php

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

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

Dies macht ob_get_length() zu einer schnellen Möglichkeit, zu prüfen, ob gerade etwas gepuffert wird — eng verwandt mit ob_get_level(), das angibt, wie viele verschachtelte Puffer geöffnet sind.

Verschachtelte Puffer: nur der aktive wird gemessen

PHP-Puffer können gestapelt werden. ob_get_length() gibt immer die Länge des obersten (innersten, aktuell aktiven) Puffers zurück — niemals die kombinierte Gesamtlänge:

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

Wenn Sie das vollständige Bild benötigen, untersuchen Sie jede Ebene mit ob_get_level() und schälen Sie die Puffer einen nach dem anderen ab.

Ein praktisches Muster: leere Ausgabe überspringen

Eine häufige Verwendung ist das Vermeiden von Ausgaben (und des damit verbundenen Aufwands), wenn ein gepuffertes Fragment leer ist:

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

Um den gepufferten Inhalt selbst statt nur seiner Länge zu lesen, verwenden Sie ob_get_contents(); um den Inhalt zu lesen und den Puffer in einem Schritt zu schließen, nutzen Sie ob_get_clean().

Fazit

ob_get_length() gibt die Bytelänge des aktiven Ausgabepuffers von PHP zurück, oder false, wenn kein Puffer geöffnet ist. Drei Dinge sind zu beachten: Es werden Bytes gezählt, es wird nur der aktive Puffer in einem verschachtelten Stapel gemessen, und ein Rückgabewert von false bedeutet, dass die Pufferung deaktiviert ist. In Kombination mit den übrigen Ausgabesteuerungsfunktionenob_get_contents(), ob_get_clean() und ob_get_level() — ermöglicht sie eine präzise Messung und Verwaltung der generierten Ausgabe, bevor sie den Browser erreicht.

Übungen

Übung
Was ist die Funktion von ob_get_length() in PHP?
Was ist die Funktion von ob_get_length() in PHP?
Was this page helpful?