stream_context_create în PHP

Rețea PHP 4.3+

Creează un set de opțiuni (metodă, antete, timeout) pentru file_get_contents, fopen și alte funcții de fișier.

Sintaxă
stream_context_create(?array $options = null, ?array $params = null)

Ce face stream_context_create

Funcțiile de fișier din PHP pot citi și adrese web. stream_context_create le spune cum să facă cererea: metoda (GET, POST), antetele, conținutul trimis, timpul maxim de așteptare. Contextul se dă ca parametru lui file_get_contents, fopen, copy și altora.

Opțiunile sunt grupate după protocol: "http" (și pentru HTTPS), "ssl", "ftp". Pentru cereri complexe către API-uri, cURL oferă mai mult control, dar contextul este suficient pentru cazurile simple.

Parametri

Parametru Descriere
$options Opțional. Tabloul de opțiuni, de forma ["http" => ["method" => "POST", ...]].
$params Opțional. Parametri suplimentari, de exemplu funcții de notificare. Rar folosit.

Ce returnează

O resursă de context.

Exemple

Exemplul 1: Un context cu timeout și antete

<?php
$context = stream_context_create([
    "http" => [
        "timeout" => 5,
        "header" => "User-Agent: MagazinulAnei/1.0\r\nAccept: application/json",
    ],
]);

print_r(stream_context_get_options($context));

Rezultat

Array
(
    [http] => Array
        (
            [timeout] => 5
            [header] => User-Agent: MagazinulAnei/1.0
Accept: application/json
        )

)

Exemplul 2: Cerere POST cu JSON către un API

<?php
$date = json_encode(["nume" => "Ana", "email" => "ana@exemplu.ro"]);

$context = stream_context_create([
    "http" => [
        "method" => "POST",
        "header" => "Content-Type: application/json",
        "content" => $date,
        "timeout" => 10,
    ],
]);

$raspuns = file_get_contents("https://api.exemplu.ro/abonati", false, $context);
echo $raspuns;

Rezultat posibil (depinde de API)

{"id":512,"status":"abonat"}

Exemplul 3: Citirea răspunsului și la erori HTTP

Fără ignore_errors, la un cod 404 sau 500 primești false și un avertisment, fără conținutul răspunsului.

<?php
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 5]]);

$raspuns = file_get_contents("https://api.exemplu.ro/produse/999", false, $context);
echo $raspuns;

Rezultat posibil (depinde de API)

{"eroare":"Produsul nu există"}

Greșeli frecvente

  • Nu pui timeout. Dacă serverul de la distanță nu răspunde, scriptul așteaptă cât prevede default_socket_timeout (implicit 60 de secunde).
  • Dezactivezi verificarea certificatului cu "ssl" => ["verify_peer" => false] ca să scapi de o eroare. Conexiunea nu mai este protejată. Repară certificatele de pe server.
  • Scrii antetele fără \r\n între ele. Dă-le ca text separat prin \r\n sau ca tablou de texte.

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.
  • json_encode: Transformă un tablou sau obiect PHP în text JSON.
  • gethostbyname: Află adresa IPv4 a unui domeniu, de exemplu adresa IP din spatele unui site.