Ce face stream_filter_append / stream_filter_prepend
Un filtru transformă datele care trec prin stream. stream_filter_append îl pune la finalul lanțului de filtre, stream_filter_prepend la început. Filtrele se aplică în ordinea din lanț.
$mode alege direcția: STREAM_FILTER_READ, STREAM_FILTER_WRITE sau STREAM_FILTER_ALL. Implicit, filtrul se aplică în direcțiile în care stream-ul a fost deschis. Funcția returnează filtrul, pe care îl poți scoate mai târziu cu stream_filter_remove.
Parametri
| Parametru | Descriere |
|---|---|
$stream |
Stream-ul la care atașezi filtrul. |
$filter_name |
Numele filtrului, de exemplu "string.toupper" sau "convert.base64-encode". |
$mode |
Opțional. STREAM_FILTER_READ, STREAM_FILTER_WRITE sau STREAM_FILTER_ALL. |
$params |
Opțional. Parametri pentru filtru, de exemplu nivelul de comprimare pentru zlib.deflate. |
Ce returnează
O resursă de filtru sau false la eroare.
Exemple
Exemplul 1: Majuscule la citire
<?php
file_put_contents("nume.txt", "ana, ion, maria");
$f = fopen("nume.txt", "r");
stream_filter_append($f, "string.toupper");
echo fread($f, 100);
Rezultat
ANA, ION, MARIA
Exemplul 2: Fișier scris direct în base64
<?php
$f = fopen("cheie.txt", "w");
stream_filter_append($f, "convert.base64-encode", STREAM_FILTER_WRITE);
fwrite($f, "Parola mea secretă");
fclose($f);
echo file_get_contents("cheie.txt") . "\n";
echo base64_decode(file_get_contents("cheie.txt"));
Rezultat
UGFyb2xhIG1lYSBzZWNyZXTEgw==
Parola mea secretă
Exemplul 3: Ordinea filtrelor
string.rot13 a fost pus cu prepend, deci rulează primul: „Salut” devine „Fnyhg”, apoi majuscule.
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Salut");
rewind($m);
stream_filter_append($m, "string.toupper");
stream_filter_prepend($m, "string.rot13");
echo stream_get_contents($m);
Rezultat
FNYHG
Greșeli frecvente
- Folosești
string.toupperpe text cu diacritice. Filtrul schimbă doar literele ASCII: „brașov” devine „BRAșOV”. Pentru română, foloseștemb_strtoupperdupă citire. - Atașezi un filtru de citire după ce ai citit deja o parte. Filtrul se aplică doar datelor citite de acum înainte.
Comenzi înrudite
stream_filter_remove: Scoate de pe un stream un filtru atașat cu stream_filter_append sau stream_filter_prepend.stream_get_filters: Returnează lista filtrelor de stream disponibile (string.toupper, convert.*, zlib.* și cele proprii).stream_filter_register: Înregistrează un filtru de stream propriu, scris ca o clasă care extinde php_user_filter.base64_encode / base64_decode: Transformă orice date (inclusiv binare) într-un text format doar din litere, cifre, +, / și =.