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.
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.
<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).
Voici un exemple de création d'un filtre de conversion de texte, nous implémenterons un filtre qui convertit le texte en majuscules.
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>, &</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>->data = </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$bucket</span></span><span>->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.
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.
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"><?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">?></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.
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.
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.