stream_get_contents în PHP

Stream-uri PHP 5.0+

Citește tot ce a rămas într-un stream deschis (fișier, memorie, socket, proces) și returnează ca text.

Sintaxă
stream_get_contents($stream, ?int $length = null, int $offset = -1): string|false

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ă rewind sau dă $offset 0.
  • Dai o cale în loc de stream: stream_get_contents("date.txt") aruncă TypeError. Pentru o cale folosește file_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.