Dans PHP, Stream_get_Filters () est une fonction très utile pour obtenir tous les filtres de flux disponibles dans le système actuel. Il renvoie un tableau contenant le nom du filtre.
Par exemple, vous verrez généralement quelque chose comme:
print_r(stream_get_filters());
La sortie est similaire:
Array
(
[0] => string.rot13
[1] => string.toupper
[2] => string.tolower
[3] => convert.iconv.*
[4] => zlib.*
)
Cependant, lorsque certains développeurs utilisent ce code, ils constatent que ce qu'ils retournent est un tableau vide:
Array
(
)
Alors, pourquoi cela se produit-il? Cet article analysera plusieurs raisons courantes et solutions correspondantes.
Les filtres à débit sont principalement fournis par des extensions, telles que ZLIB , ICONV , etc. Si vous utilisez PHP compilé avec une configuration minimale, de nombreuses extensions peuvent être supprimées, ce qui entraînera Stream_get_Filters () pour retourner vide.
Pour vérifier si les extensions pertinentes sont chargées dans le PHP actuel, vous pouvez utiliser la commande suivante:
php -m
Si vous constatez que des extensions telles que ZLIB et ICONV sont manquantes, vous devez recompiler PHP ou modifier php.ini pour activer ces extensions.
Pour les distributions Linux communes, vous pouvez utiliser:
sudo apt install php-zlib php-iconv
Redémarrez le service PHP après l'installation.
Certains développeurs testent Stream_get_Filters () sur la ligne de commande (CLI), et le résultat est vide, mais il est normal d'y accéder dans le navigateur. Cela est généralement dû au fait que les environnements CLI et Web utilisent différents fichiers de configuration php.ini .
Vérifiez le chemin du fichier de configuration de la CLI avec la commande suivante:
php --ini
Vérifiez le fichier de configuration chargé dedans pour vous assurer que les extensions dont vous avez besoin sont chargées dans le fichier de configuration CLI.
Si le FPM utilise différents php.ini , vous devez également les vérifier et les aligner.
Certains environnements de développement (tels que certaines images basés sur des conteneurs) suppriment presque toutes les extensions par défaut afin de réduire le volume. Dans ce cas, même si PHP démarre normalement, Stream_get_Filters () peut revenir vide.
Vérifiez l'image PHP ou le package d'installation que vous utilisez, confirmez s'il s'agit de la version complète et passez à une version contenant une extension standard si nécessaire.
Dans certains environnements strictement restreints, tels que l'hébergement partagé, les fonctionnalités liées au flux peuvent être désactivées via DISABLE_FONCTIONS ou d'autres moyens.
Vérifiez la sortie de phpinfo () ou php -i pour vérifier si les fonctions pertinentes sont répertoriées dans le paramètre Disabled_Functions .
S'il est désactivé par le fournisseur d'hébergement, vous devrez peut-être les contacter ou passer à un environnement d'hébergement plus flexible.
En supposant que votre environnement PHP manque ZLIB , vous pouvez charger dynamiquement de la manière suivante (à condition que le système ait des fichiers .So ou .dll correspondants):
if (!extension_loaded('zlib')) {
dl('zlib.so');
}
Veuillez noter que la fonction DL () n'est généralement valable que sous la CLI et peut ne pas être prise en charge par l'environnement Web.
<?php
$filters = stream_get_filters();
if (empty($filters)) {
echo "Aucun filtre de flux disponible actuellement,Vérifier les extensions et la configuration。\n";
echo "référence:https://gitbox.net/php/extensions-setup\n";
} else {
echo "Filtres de débit disponibles:\n";
print_r($filters);
}
?>
Ici, nous indiquerons https://gitbox.net/php/extensions-setup (notez que le nom de domaine est remplacé).
Si vous trouvez que Stream_get_Filters () renvoie un tableau vide, ne paniquez pas. C'est généralement juste un problème avec la configuration ou les extensions de l'environnement manquant. Grâce aux étapes d'inspection ci-dessus, la cause peut être essentiellement située et résolue.
Si vous rencontrez plus de problèmes spéciaux, vous êtes également invités à publier et à discuter dans la section ou le forum des commentaires, ou visitez Gitbox.net directement pour plus d'aide.