Ce face stream_get_contents
stream_get_contents este varianta lui file_get_contents pentru un stream deja deschis cu fopen, popen, proc_open sau stream_socket_client. Citește de la poziția curentă până la final.
Cu $length citești cel mult atâția octeți. Cu $offset sari mai întâi la o anumită poziție, numărată de la începutul stream-ului. Valoarea implicită -1 înseamnă „de unde a rămas”.
Parametri
| Parametru | Descriere |
|---|---|
$stream |
Stream-ul din care citești, deschis pentru citire. |
$length |
Opțional. Numărul maxim de octeți. null înseamnă tot ce a rămas. |
$offset |
Opțional. Poziția de la care începe citirea. -1 înseamnă poziția curentă. |
Ce returnează
Textul citit (poate fi gol, dacă nu mai era nimic de citit) sau false la eroare.
Exemple
Exemplul 1: Restul unui stream din memorie
După fwrite, poziția este la final. rewind o duce înapoi la început. A doua citire returnează text gol, pentru că totul a fost deja citit.
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Ana\nIon\nMaria");
rewind($m);
var_dump(stream_get_contents($m));
var_dump(stream_get_contents($m));
Rezultat
string(13) "Ana
Ion
Maria"
string(0) ""
Exemplul 2: Doar o bucată, de la o poziție dată
Sărim peste primii 4 octeți (Ana și linia nouă) și citim 3 octeți.
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Ana\nIon\nMaria");
var_dump(stream_get_contents($m, 3, 4));
Rezultat
string(3) "Ion"
Exemplul 3: Antetul separat de restul fișierului
<?php
file_put_contents("comenzi.csv", "nume,oras\nAna,Iași\nIon,Cluj\n");
$f = fopen("comenzi.csv", "r");
$antet = fgets($f);
$date = stream_get_contents($f);
fclose($f);
echo "Antet: $antet";
echo "Date:\n$date";
Rezultat
Antet: nume,oras
Date:
Ana,Iași
Ion,Cluj
Greșeli frecvente
- Scrii într-un stream și citești imediat cu
stream_get_contents. Primești text gol, pentru că poziția este la final. Apeleazărewindsau dă$offset0. - Dai o cale în loc de stream:
stream_get_contents("date.txt")aruncăTypeError. Pentru o cale foloseștefile_get_contents.
Comenzi înrudite
file_get_contents: Citește tot conținutul unui fișier (sau al unei adrese URL) într-un text.fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.stream_copy_to_stream: Copiază datele dintr-un stream în altul, pe bucăți, fără să încarce tot conținutul în memorie.stream_get_line: Citește dintr-un stream până la un separator ales de tine, fără să includă separatorul în rezultat.