Signatur
Beschreibung
stream_get_filters() liefert eine indizierte Liste aller Stream-Filter, die im aktuellen PHP-Prozess registriert sind – sowohl die eingebauten PHP-Filter (z. B. string.toupper, string.tolower, convert.iconv.*, zlib.deflate) als auch alle über stream_filter_register() hinzugefügten benutzerdefinierten Filter.
Stream-Filter können auf Streams angewendet werden, um Daten beim Lesen oder Schreiben automatisch zu transformieren – z. B. zur Konvertierung von Zeichensätzen, Komprimierung oder Verschlüsselung. Mit stream_get_filters() lässt sich zur Laufzeit prüfen, welche Filter verfügbar sind, bevor man sie mit stream_filter_append() oder stream_filter_prepend() einsetzt.
Dies ist besonders nützlich, um die Existenz eines bestimmten Filters sicherzustellen, bevor eine Anwendung ihn nutzt, oder um in Diagnose-Tools eine vollständige Übersicht über die Stream-Fähigkeiten der Umgebung zu geben.
Rückgabewert
false oder null – im schlimmsten Fall ein leeres Array.Beispiele
Alle verfügbaren Stream-Filter ausgeben
<?php
$filters = stream_get_filters();
echo "Verfügbare Stream-Filter:" . PHP_EOL;
foreach ($filters as $filter) {
echo ' - ' . $filter . PHP_EOL;
}
Prüfen, ob ein bestimmter Filter verfügbar ist, bevor er genutzt wird
<?php
// Benutzerdefinierten Filter registrieren
class MyUpperFilter extends php_user_filter {
public function filter($in, $out, &$consumed, $closing): int {
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = strtoupper($bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
stream_filter_register('my.upper', 'MyUpperFilter');
// Jetzt prüfen, ob der Filter registriert ist
$filters = stream_get_filters();
if (in_array('my.upper', $filters)) {
$fp = fopen('php://memory', 'r+');
stream_filter_append($fp, 'my.upper');
fwrite($fp, 'hallo welt');
rewind($fp);
echo fread($fp, 100) . PHP_EOL; // Gibt: HALLO WELT
fclose($fp);
} else {
echo "Filter 'my.upper' ist nicht registriert." . PHP_EOL;
}
// Wichtig · Fallstricke
Die Ausgabe von stream_get_filters() kann je nach PHP-Version, Kompilieroptionen und geladenen Erweiterungen variieren. Filter wie zlib.* oder convert.iconv.* sind nur verfügbar, wenn die entsprechenden Erweiterungen (zlib, iconv) aktiv sind.
Einige Filter wie convert.iconv.* erscheinen als Platzhalter mit Wildcard-Zeichen in der Liste. Das bedeutet, dass mehrere konkrete Filter unter diesem Namensschema verfügbar sind (z. B. convert.iconv.UTF-8/ISO-8859-1), ohne dass jede Kombination einzeln aufgeführt wird.