stream_get_meta_data în PHP

Stream-uri PHP 4.3+

Returnează informații despre un stream deschis: tipul, modul, poziția la final, timeout, antetele HTTP.

Sintaxă
stream_get_meta_data($stream): array

Ce face stream_get_meta_data

stream_get_meta_data îți spune ce fel de stream ai în mână. Cheile cele mai utile sunt uri (calea sau adresa), mode (modul din fopen), seekable (dacă poți sări prin el), eof (dacă ai ajuns la final) și timed_out (dacă ultima citire de pe un socket a expirat).

Pentru adrese web deschise cu fopen, cheia wrapper_data conține antetele răspunsului HTTP. Numele vechi socket_get_status este un alias al aceleiași funcții.

Parametri

Parametru Descriere
$stream Stream-ul despre care vrei informații.

Ce returnează

Un tablou asociativ. Cheile timed_out, blocked și eof apar doar pentru stream-urile care au aceste stări.

Exemple

Exemplul 1: Un fișier deschis pentru citire

<?php
file_put_contents("nota.txt", "Cumpără pâine");
$f = fopen("nota.txt", "r");

print_r(stream_get_meta_data($f));

Rezultat

Array
(
    [timed_out] => 
    [blocked] => 1
    [eof] => 
    [wrapper_type] => plainfile
    [stream_type] => STDIO
    [mode] => r
    [unread_bytes] => 0
    [seekable] => 1
    [uri] => nota.txt
)

Exemplul 2: Cheia eof după citire

eof devine true abia după o citire care a ajuns la final, nu când poziția este doar aproape de final.

<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Salut");
rewind($m);

var_dump(stream_get_meta_data($m)["eof"]);
fread($m, 100);
var_dump(stream_get_meta_data($m)["eof"]);

Rezultat

bool(false)
bool(true)

Exemplul 3: Antetele unui răspuns HTTP

<?php
$f = fopen("https://www.exemplu.ro/", "r");
$info = stream_get_meta_data($f);

echo $info["wrapper_type"] . "\n";
print_r(array_slice($info["wrapper_data"], 0, 3));

Rezultat posibil (depinde de server)

http
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Mon, 19 Oct 2026 09:14:02 GMT
    [2] => Content-Type: text/html; charset=UTF-8
)

Greșeli frecvente

  • Te bazezi pe cheia eof sau timed_out pentru un stream care nu le are, de exemplu php://temp. Folosește ?? false sau funcția feof.

Comenzi înrudite

  • fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.
  • stream_set_timeout: Stabilește cât timp așteaptă o citire de pe un socket înainte să renunțe.
  • feof: Verifică dacă s-a ajuns la sfârșitul unui fișier deschis.
  • stream_context_create: Creează un set de opțiuni (metodă, antete, timeout) pentru file_get_contents, fopen și alte funcții de fișier.