Start · Sprachen · PHP · Referenz · ob_list_handlers

ob_list_handlers

Funktion

Gibt ein Array mit allen aktuell aktiven Ausgabe-Puffer-Handlern zurück.

seit PHP 4.3.0 Kategorie: io

Signatur

ob_list_handlers(): array

Beschreibung

ob_list_handlers() liefert ein indiziertes Array, das die Namen aller momentan aktiven Ausgabe-Handler enthält. Jeder Handler entspricht einem gestapelten Ausgabe-Puffer, der zuvor mit ob_start() geöffnet wurde.

Ist kein Callback-Handler registriert (d. h. ob_start() wurde ohne Argument aufgerufen), erscheint der Eintrag default output handler im Array. Benutzerdefinierte Callback-Funktionen werden mit ihrem Funktionsnamen gelistet. Interne Handler wie ob_gzhandler oder der URL-Rewriter erscheinen entsprechend mit ihrem Namen.

Die Funktion ist besonders nützlich beim Debuggen verschachtelter Ausgabe-Puffer oder wenn man sicherstellen möchte, dass bestimmte Handler aktiv sind, bevor man weitere Puffer-Operationen durchführt. Sie ermöglicht einen schnellen Überblick über den aktuellen Puffer-Stack.

Rückgabewert

Typ
array
Beschreibung
Gibt ein indiziertes Array von Strings zurück. Jeder String enthält den Namen eines aktiven Ausgabe-Handlers. Ist kein Handler registriert, enthält der entsprechende Eintrag 'default output handler'. Das Array ist leer, wenn kein Ausgabe-Puffer aktiv ist.

Beispiele

Aktive Handler ohne Callback auflisten

<?php
// Einfachen Puffer ohne Handler starten
ob_start();

$handlers = ob_list_handlers();
print_r($handlers);

ob_end_clean();
Array ( [0] => default output handler )

Verschachtelte Puffer mit verschiedenen Handlern inspizieren

<?php
// Ersten Puffer ohne Callback starten
ob_start();

// Zweiten Puffer mit benutzerdefiniertem Callback starten
ob_start(function(string $buffer): string {
    return strtoupper($buffer);
});

// Dritten Puffer mit ob_gzhandler starten (falls verfügbar)
// ob_start('ob_gzhandler');

$handlers = ob_list_handlers();
print_r($handlers);

// Alle Puffer schließen
ob_end_clean();
ob_end_clean();
Array ( [0] => default output handler [1] => Closure::__invoke )

Prüfen, ob ob_gzhandler bereits aktiv ist

<?php
// Nur dann ob_gzhandler registrieren, wenn er noch nicht aktiv ist
$activeHandlers = ob_list_handlers();

if (!in_array('ob_gzhandler', $activeHandlers)) {
    ob_start('ob_gzhandler');
    echo "ob_gzhandler wurde gestartet.\n";
} else {
    echo "ob_gzhandler ist bereits aktiv.\n";
}

print_r(ob_list_handlers());

ob_end_flush();
ob_gzhandler wurde gestartet. Array ( [0] => ob_gzhandler )

// Wichtig · Fallstricke

Reihenfolge der Handler: Das Array ist nach der Reihenfolge geordnet, in der die Handler gestartet wurden – der älteste Handler steht an Index 0, der zuletzt gestartete am Ende des Arrays. Diese Reihenfolge entspricht dem Puffer-Stack von außen nach innen.

Closure-Handler: Wird eine anonyme Funktion (Closure) als Handler verwendet, erscheint im Array der String Closure::__invoke, was bei mehreren Closures keine eindeutige Unterscheidung erlaubt. Benannte Funktionen sind daher bei komplexen Puffer-Szenarien vorzuziehen.

PHP-INI-Einstellungen: Der Handler URL-Rewriter kann automatisch aktiv sein, wenn url_rewriter.tags in der php.ini gesetzt ist und Session-Transparenz aktiviert wurde (session.use_trans_sid).