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 prevededefault_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\nsau 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.