Position actuelle: Accueil> Derniers articles> Utilisez Stream_get_Filters pour obtenir des filtres à flux de fichiers et effectuer une optimisation des performances

Utilisez Stream_get_Filters pour obtenir des filtres à flux de fichiers et effectuer une optimisation des performances

gitbox 2025-05-19

Dans PHP, il s'agit d'un outil très puissant qui peut convertir ou traiter dynamiquement les données lorsqu'il est lu ou écrit dans un flux (tels que les fichiers, les réseaux, la mémoire, etc.). Pour donner un exemple simple, vous pouvez automatiquement compresser, décompresser, coder et même filtrer le contenu lors de la lecture de fichiers.

Afin de mieux optimiser les performances des programmes PHP, nous devons savoir quels filtres de flux sont disponibles dans le système actuel, puis nous pouvons utiliser la fonction Stream_get_Filters () .

Que sont Stream_get_Filters?

Stream_get_Filters () est une fonction intégrée en PHP pour renvoyer une liste de tous les filtres de flux enregistrés par le système actuel. Son utilisation de base est très simple:

 $filters = stream_get_filters();
print_r($filters);

La sortie peut ressembler à ceci:

 Array
(
    [0] => string.rot13
    [1] => string.toupper
    [2] => string.tolower
    [3] => convert.iconv.*
    [4] => convert.*
    [5] => zlib.*
    [6] => bzip2.*
)

Les noms de ces filtres peuvent être utilisés dans stream_filter_append () ou stream_filter_prepennd () pour attacher dynamiquement des filtres à un flux.

Comment utiliser un filtre à débit pour améliorer les performances?

Bien que Stream_get_Filters () ne soit qu'une liste, l'utilisation des filtres peut raisonnablement optimiser considérablement le flux de traitement des données, réduire la complexité du code et améliorer l'efficacité des E / S.

Voici quelques suggestions et exemples d'optimisation:

1 ?? Évitez le traitement de la boucle manuelle

Si vous avez besoin de compresser ou de coder le contenu du fichier de lecture, vous n'avez pas besoin d'utiliser une boucle de temps pour le traiter, mais vous pouvez utiliser un filtre directement.

Par exemple, la rédaction automatique de fichiers compressées GZIP:

 $filename = 'example.txt.gz';
$fp = fopen($filename, 'w');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE);
fwrite($fp, 'Ceci est un morceau de texte qui doit être compressé。');
fclose($fp);

Ce code écrit directement des données dans le fichier Exemple.txt.gz dans la compression GZIP, en évitant la compression manuelle et plusieurs opérations de fichiers, et l'amélioration des performances.

2 ?? Réduire le stockage intermédiaire

Supposons que vous ayez besoin de convertir un fichier texte codé UTF-8 en stockage codé ISO-8859-1. Vous n'avez pas besoin de le lire en mémoire d'abord, puis d'utiliser iconv () pour le convertir, mais utilisez directement des filtres:

 $source = fopen('utf8file.txt', 'r');
$target = fopen('convertedfile.txt', 'w');
stream_filter_append($target, 'convert.iconv.UTF-8/ISO-8859-1', STREAM_FILTER_WRITE);

while (!feof($source)) {
    $line = fgets($source);
    fwrite($target, $line);
}

fclose($source);
fclose($target);

3 ?? En combinaison avec des filtres personnalisés

PHP permet l'enregistrement des filtres à débit personnalisés, ce qui est particulièrement utile pour des scénarios commerciaux spécifiques tels que le filtrage des journaux, le remplacement sensible des mots, etc.

 class UpperCaseFilter extends php_user_filter {
    function filter($in, $out, &$consumed, $closing) {
        while ($bucket = stream_bucket_make_writeable($in)) {
            $bucket->data = strtoupper($bucket->data);
            $consumed += $bucket->datalen;
            stream_bucket_append($out, $bucket);
        }
        return PSFS_PASS_ON;
    }
}

// Enregistrer le filtre
stream_filter_register('string.uppercase', 'UpperCaseFilter');

// Utilisation des filtres
$fp = fopen('php://output', 'w');
stream_filter_append($fp, 'string.uppercase');
fwrite($fp, 'hello gitbox.net!');
fclose($fp);

La sortie sera:

 HELLO GITBOX.NET!

résumé

Stream_get_Filters () n'est que le point de départ de l'optimisation des performances. Il nous aide à comprendre quels outils sont disponibles, et la véritable optimisation vient de:

? Utilisez des filtres intégrés pour réduire le traitement des données manuelles
? Évitez les opérations de mémoire et d'E / S redondantes
? Écrivez et appliquez des filtres personnalisés pour s'adapter à vos scénarios commerciaux

Grâce à ces méthodes, vous pouvez améliorer considérablement les performances de PHP dans la gestion des flux de fichiers, des flux de réseau, des flux de mémoire et d'autres scénarios.

Si vous voulez en savoir plus, veuillez consulter la documentation officielle:
https://www.gitbox.net/manual/en/fonction.stream-get-filters.php