In PHP ist Stream_get_filters () eine sehr nützliche Funktion, um alle Stream -Filter im aktuellen System verfügbar zu machen. Es gibt ein Array zurück, das den Filternamen enthält.
Normalerweise sehen Sie so etwas wie:
print_r(stream_get_filters());
Die Ausgabe ist ähnlich:
Array
(
[0] => string.rot13
[1] => string.toupper
[2] => string.tolower
[3] => convert.iconv.*
[4] => zlib.*
)
Wenn einige Entwickler diesen Code verwenden, stellen sie fest, dass das, was sie zurückgeben, ein leeres Array ist:
Array
(
)
Warum passiert das? Dieser Artikel wird mehrere häufige Gründe und entsprechende Lösungen analysieren.
Durchflussfilter werden hauptsächlich durch Erweiterungen wie ZLIB , Iconv usw. bereitgestellt. Wenn Sie PHP mit einer minimalen Konfiguration verwenden, können viele Erweiterungen entfernt werden, was dazu führt, dass Stream_get_Filters () leer zurückgibt.
Um zu überprüfen, ob die relevanten Erweiterungen im aktuellen PHP geladen sind, können Sie den folgenden Befehl verwenden:
php -m
Wenn Sie feststellen, dass Erweiterungen wie ZLIB und ICONV fehlen, müssen Sie PHP neu kompilieren oder php.ini ändern, um diese Erweiterungen zu ermöglichen.
Für gemeinsame Linux -Verteilungen können Sie verwenden:
sudo apt install php-zlib php-iconv
Starten Sie den PHP -Dienst nach der Installation neu.
Einige Entwickler testen Stream_get_filters () in der Befehlszeile (CLI), und das Ergebnis ist leer, aber es ist normal, im Browser darauf zuzugreifen. Dies liegt normalerweise daran, dass die CLI- und Webumgebungen verschiedene Php.ini -Konfigurationsdateien verwenden.
Überprüfen Sie den Konfigurationsdateipfad der CLI mit dem folgenden Befehl:
php --ini
Überprüfen Sie die geladene Konfigurationsdatei in der IT, um sicherzustellen, dass die von Ihnen benötigten Erweiterungen in der CLI -Konfigurationsdatei geladen werden.
Wenn das FPM verschiedene Php.ini verwendet, müssen Sie sie auch überprüfen und ausrichten.
Einige Entwicklungsumgebungen (wie einige containerbasierte Bilder) entfernen fast alle Standardverlängerungen, um das Volumen zu verringern. In diesem Fall kann Stream_get_filters () , auch wenn PHP normal startet, leer zurückkehren.
Überprüfen Sie das von Ihnen verwendete PHP -Bild oder das Installationspaket, bestätigen Sie, ob es sich um die Vollversion handelt, und wechseln Sie bei Bedarf in eine Version, die eine Standarderweiterung enthält.
In einigen streng eingeschränkten Umgebungen, wie z. B. gemeinsamer Hosting, können Stream-bezogene Funktionen durch deaktivierte oder andere Mittel deaktiviert werden.
Überprüfen Sie die Ausgabe von phpinfo () oder PHP -i, um zu überprüfen, ob die relevanten Funktionen in der Einstellung dentalled_functions aufgeführt sind.
Wenn es vom Hosting -Anbieter deaktiviert wird, müssen Sie möglicherweise kontaktieren oder zu einer flexibleren Hosting -Umgebung wechseln.
Unter der Annahme, dass Ihre PHP -Umgebung ZLIB fehlt, können Sie dynamisch auf folgende Weise laden (vorausgesetzt, das System hat entsprechende .so- oder .dll -Dateien):
if (!extension_loaded('zlib')) {
dl('zlib.so');
}
Bitte beachten Sie, dass die DL () -Funktion normalerweise nur unter der CLI gültig ist und möglicherweise nicht von der Webumgebung unterstützt wird.
<?php
$filters = stream_get_filters();
if (empty($filters)) {
echo "Derzeit kein Streamfilter verfügbar,Überprüfen Sie die Erweiterungen und Konfiguration。\n";
echo "Referenz:https://gitbox.net/php/extensions-setup\n";
} else {
echo "Verfügbare Flussfilter:\n";
print_r($filters);
}
?>
Hier verweisen wir auf https://gitbox.net/php/extensions-setup (Beachten Sie, dass der Domänenname ersetzt wird).
Wenn Sie diese Stream_get_filters () finden, gibt ein leeres Array zurück, keine Panik. Es ist normalerweise nur ein Problem mit der Konfiguration oder Erweiterung der fehlenden Umgebung. Durch die oben genannten Inspektionsschritte kann die Ursache im Grunde genommen gefunden und gelöst werden.
Wenn Sie auf weitere spezielle Probleme stoßen, können Sie auch im Kommentarbereich oder im Forum eingeladen oder diskutieren oder gitbox.net direkt besuchen, um mehr Hilfe zu erhalten.