stream_filter_append / stream_filter_prepend în PHP

Stream-uri PHP 4.3+

Atașează un filtru unui stream, ca datele să fie transformate (majuscule, base64, comprimare) la citire sau scriere.

Sintaxă
stream_filter_append($stream, string $filter_name, int $mode = 0, mixed $params): resource|false

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.toupper pe text cu diacritice. Filtrul schimbă doar literele ASCII: „brașov” devine „BRAșOV”. Pentru română, folosește mb_strtoupper după 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 =.