Position actuelle: Accueil> Derniers articles> Comment créer un filtre de conversion de texte simple avec stream_filter_append?

Comment créer un filtre de conversion de texte simple avec stream_filter_append?

gitbox 2025-09-29

Comment créer un filtre de conversion de texte simple avec stream_filter_append ?

Dans PHP, la fonction Stream_Filter_APPEND () nous permet de joindre un filtre au flux, afin que les données du flux puissent être traitées et converties en temps réel. Cet article présentera comment utiliser stream_filter_append () pour créer un filtre de conversion de texte simple, manipuler des données dans le flux et effectuer certaines conversions de texte courantes, telles que la conversion majuscule, la conversion en minuscules, etc.

Qu'est-ce que Stream_Filter_APPEND () ?

Stream_Filter_APPEND () est une fonction intégrée PHP qui vous permet d'ajouter un filtre à un certain flux. La fonction du filtre est de traiter les données du flux, telles que: modification, conversion, compression, etc. Le filtre de débit peut être intégré ou personnalisé par vous.

Syntaxe de base

 <span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filtername</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$read_write</span></span><span> = STREAM_FILTER_READ, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$params</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ Stream : le flux pour fixer le filtre.

  • $ filterName : le nom du filtre, qui peut être un filtre intégré ou un filtre personnalisé.

  • $ read_write : spécifie s'il faut lire ou écrire un flux. Stream_Filter_read représente le flux de lecture et Stream_Filter_Write représente le flux d'écriture.

  • $ Params : Paramètres transmis au filtre (facultatif).

Créer un filtre de conversion de texte simple

Voici un exemple de création d'un filtre de conversion de texte, nous implémenterons un filtre qui convertit le texte en majuscules.

Étape 1: Définissez un filtre personnalisé

Tout d'abord, nous devons créer une classe de filtre simple, hériter de la classe PHP_USER_FILTER et implémenter ses méthodes. Ce filtre convertira le texte dans le flux en majuscules.

 <span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">UppercaseFilter</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">php_user_filter</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">filter</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$in</span></span></span><span>, </span><span><span class="hljs-variable">$out</span></span><span>, &amp;</span><span><span class="hljs-variable">$consumed</span></span><span>, </span><span><span class="hljs-variable">$closing</span></span><span>) {
        </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$bucket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_bucket_make_writeable</span></span><span>(</span><span><span class="hljs-variable">$in</span></span><span>)) {
            </span><span><span class="hljs-comment">// Convertir les données dans les flux en majuscules</span></span><span>
            </span><span><span class="hljs-variable">$bucket</span></span><span>-&gt;data = </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$bucket</span></span><span>-&gt;data);
            </span><span><span class="hljs-comment">// Sortir les données converties en flux cible</span></span><span>
            </span><span><span class="hljs-title function_ invoke__">stream_bucket_append</span></span><span>(</span><span><span class="hljs-variable">$out</span></span><span>, </span><span><span class="hljs-variable">$bucket</span></span><span>);
        }
        </span><span><span class="hljs-keyword">return</span></span><span> PSFS_PASS_ON;
    }
}
</span></span>

Dans cette classe, la méthode filtre () est la partie la plus critique. Il recevra les données du flux d'entrée, le convertira en majuscules puis sortira en flux cible.

Étape 2: enregistrez le filtre

Ensuite, nous devons utiliser la fonction Stream_Filter_Register () pour enregistrer ce filtre personnalisé dans l'environnement PHP.

 <span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);
</span></span>

Grâce à cette étape, nous enregistrons le UpperCaseFilter en tant que filtre appelé majuscules pour que nous puissions utiliser dans le traitement des flux.

Étape 3: Utilisez stream_filter_append () pour ajouter des filtres

Nous pouvons joindre le filtre enregistré à un flux via Stream_Filter_APPEND () . Voici un exemple montrant comment lire un fichier texte et convertir son contenu en majuscules via un filtre de flux.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Enregistrer le filtre</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);

</span><span><span class="hljs-comment">// Ouvrez le flux de fichiers</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"example.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);

</span><span><span class="hljs-comment">// Joindre un filtre de conversion personnalisé au flux de fichiers</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-string">"uppercase"</span></span><span>, STREAM_FILTER_READ);

</span><span><span class="hljs-comment">// Lisez le contenu du fichier et sortit-le</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
}

</span><span><span class="hljs-comment">// Fermez le flux de fichiers</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Dans l'exemple ci-dessus, nous ouvrons un fichier nommé Exemple.txt et joignons le filtre en majuscule au flux de fichiers. Chaque fois que nous lisons des données dans le flux, le filtre les convertit automatiquement en lettres majuscules, puis les sort.

Étape 4: test et vérification

Supposons que le contenu du fichier Exemple.txt est le suivant:

 <span><span>hello world
</span><span><span class="hljs-keyword">this</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> a test.
</span></span>

Après avoir exécuté le code ci-dessus, la sortie sera:

 <span><span>HELLO WORLD
THIS IS </span><span><span class="hljs-selector-tag">A</span></span><span> TEST.
</span></span>

Comme vous pouvez le voir, tout le texte a été converti en majuscules.

Résumer

Avec stream_filter_append (), nous pouvons facilement ajouter des filtres aux flux pour obtenir un traitement en temps réel des données. Dans cet article, nous avons créé un filtre de conversion de texte simple qui convertit le texte d'entrée en majuscules. Grâce à la combinaison de filtres et de flux personnalisés, PHP fournit de puissantes capacités de traitement des données de flux qui peuvent répondre à divers besoins de scénarios complexes.

Espérons qu'avec cet exemple simple, vous pouvez comprendre comment utiliser Stream_Filter_APPEND () pour créer votre propre filtre de flux et l'appliquer au traitement de texte.