Position actuelle: Accueil> Derniers articles> Comment utiliser Stream_get_Filters et Stream_Filter_APPEND en combinaison

Comment utiliser Stream_get_Filters et Stream_Filter_APPEND en combinaison

gitbox 2025-05-28

Dans PHP, Stream est un concept clé pour gérer les fichiers, les connexions réseau ou d'autres ressources d'entrée / sortie. Les filtres de flux sont des modules fonctionnels attachés au flux qui peuvent traiter les données dans le flux et modifier les données avant d'être lue ou écrite. Stream_get_Filters et Stream_Filter_APPEND sont deux fonctions importantes en PHP qui gèrent les filtres Stream.

Cet article expliquera en détail comment utiliser ces deux fonctions et comment ils peuvent être utilisés ensemble pour implémenter le filtrage des données de streaming.

Qu'est-ce que Stream_get_Filters ?

La fonction Stream_get_Filters est utilisée pour obtenir tous les filtres de flux actuellement disponibles. Les filtres de flux sont des fonctions prédéfinies qui peuvent modifier le comportement d'un flux ou des données de processus dans le flux. Vous pouvez afficher les filtres de flux enregistrés dans le système en appelant Stream_get_Filters .

Exemple de code:

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

Ce code sortira tous les filtres de flux disponibles. Par exemple, vous pouvez voir des filtres tels que String.toupper , convert.base64-encode , etc. Chaque filtre correspond à une conversion ou une opération de données spécifique.

Qu'est-ce que Stream_Filter_APPEND ?

La fonction Stream_Filter_APPEND est utilisée pour ajouter un filtre à un flux. Contrairement à Stream_Filter_Prepennd , Stream_Filter_APPEND contribue un filtre à la fin du flux, il traite donc les données avant le renvoi des données de sortie du flux. Vous pouvez utiliser Stream_Filter_APPEND pour attacher un filtre de flux personnalisé ou utiliser le filtre fourni par le système.

Exemple de code:

 $fp = fopen("php://temp", "r+");
stream_filter_append($fp, "string.toupper");

fwrite($fp, "hello world\n");
rewind($fp);
echo fread($fp, 1024); // Sortir: HELLO WORLD
fclose($fp);

Dans l'exemple ci-dessus, nous utilisons Stream_Filter_APPEND pour ajouter le filtre String.toupper dans le flux de fichiers afin que le contenu écrit soit automatiquement converti en lettres majuscules.

Comment utiliser stream_get_filters et stream_filter_append en combinaison?

En combinant ces deux fonctions, vous pouvez d'abord consulter les filtres disponibles et sélectionner un filtre approprié à appliquer à votre flux. Tout d'abord, vous pouvez utiliser Stream_get_Filters pour afficher tous les filtres, puis joindre un filtre au flux via Stream_Filter_APPEND , modifiant ainsi la façon dont les données du flux sont traitées.

Exemple: utilisation en conjonction

Supposons que nous voulons lire le contenu d'un fichier et convertir tout le texte en lettres majuscules. Nous utiliserons Stream_get_Filters pour afficher les filtres disponibles, sélectionner un filtre approprié, puis utiliser Stream_Filter_APPEND pour filtrer le flux de fichiers.

 // Voir les filtres disponibles
$filters = stream_get_filters();
print_r($filters);

// Choisissez le bon filtre(string.toupper)et attaché au flux
$fp = fopen("sample.txt", "r+");
stream_filter_append($fp, "string.toupper");

// Écrire et lire le contenu des fichiers
fwrite($fp, "hello world\n");
rewind($fp);
echo fread($fp, 1024); // Sortir: HELLO WORLD
fclose($fp);

Utiliser des filtres personnalisés

En plus des filtres fournis par le système, PHP permet également aux utilisateurs de créer des filtres de flux personnalisés. Pour utiliser des filtres personnalisés, vous pouvez utiliser Stream_Filter_APPEND pour attacher ces filtres. Voici un exemple de filtre personnalisé simple qui montre comment convertir toutes les lettres minuscules en texte en lettres majuscules.

Exemple de code filtre personnalisé:

 // Créer un filtre personnalisé
class UppercaseFilter extends php_user_filter {
    public function filter($in, $out) {
        while ($bucket = stream_bucket_make_writeable($in)) {
            // Convertir en capital
            $bucket->data = strtoupper($bucket->data);
            stream_bucket_append($out, $bucket);
        }
        return PSFS_PASS_ON;
    }
}

// Enregistrer le filtre
stream_filter_register("uppercase", "UppercaseFilter");

// Utiliser des filtres personnalisés
$fp = fopen("php://temp", "r+");
stream_filter_append($fp, "uppercase");

fwrite($fp, "hello world\n");
rewind($fp);
echo fread($fp, 1024); // Sortir: HELLO WORLD
fclose($fp);

Dans cet exemple, nous créons un filtre de flux personnalisé, UpperCaseFilter , qui convertit toutes les lettres minuscules dans le flux d'entrée en lettres majuscules.

Conclusion

stream_get_filters et stream_filter_append sont les fonctions principales du mécanisme de filtre de flux puissant en php. Avec ces fonctions, vous pouvez facilement gérer les filtres du flux et traiter les données du flux en temps réel. L'utilisation de ces fonctions en combinaison peut vous aider à traiter de manière flexible divers flux de données et à répondre aux besoins de différents scénarios.

En pratique, vous pouvez répondre aux besoins de traitement des données plus complexes en regardant les filtres de flux disponibles, en sélectionnant le filtre le plus approprié ou en personnalisant les filtres.

J'espère que cet article vous sera utile de comprendre et d'utiliser les fonctions Stream_get_Filters et Stream_Filter_APPEND !