stream_context_get_params / stream_context_set_params în PHP

Stream-uri PHP 5.3+ (stream_context_set_params: PHP 4.3+)

Citește și setează parametrii unui context: funcția de notificare (progres) și opțiunile.

Sintaxă
stream_context_get_params($context): array

Ce face stream_context_get_params / stream_context_set_params

Pe lângă opțiuni, un context are parametri. Cel mai util este notification: o funcție apelată în timpul unei descărcări HTTP sau FTP, cu evenimente precum conectarea, aflarea dimensiunii și progresul.

stream_context_set_params setează parametrii (poate primi și cheia options), iar stream_context_get_params îi returnează, împreună cu opțiunile, sub cheia options.

Parametri

Parametru Descriere
$context Contextul citit sau modificat. La set_params urmează tabloul de parametri.

Ce returnează

get_params: un tablou cu cheile notification (dacă există) și options. set_params: mereu true.

Exemple

Exemplul 1: Parametri și opțiuni

<?php
$context = stream_context_create(["http" => ["timeout" => 5]]);
stream_context_set_params($context, [
    "notification" => function () {},
]);

$parametri = stream_context_get_params($context);
print_r(array_keys($parametri));
print_r($parametri["options"]);

Rezultat

Array
(
    [0] => notification
    [1] => options
)
Array
(
    [http] => Array
        (
            [timeout] => 5
        )

)

Exemplul 2: Progresul unei descărcări

<?php
$context = stream_context_create();
stream_context_set_params($context, [
    "notification" => function (int $cod, int $sev, ?string $mesaj, int $mcod, int $primit, int $total) {
        if ($cod === STREAM_NOTIFY_FILE_SIZE_IS) {
            echo "Dimensiune: $total octeți\n";
        }
        if ($cod === STREAM_NOTIFY_PROGRESS && $total > 0) {
            echo "Progres: " . round($primit / $total * 100) . "%\n";
        }
    },
]);

file_get_contents("https://www.exemplu.ro/catalog.pdf", false, $context);

Rezultat posibil (depinde de fișier)

Dimensiune: 245760 octeți
Progres: 3%
Progres: 7%
...
Progres: 100%

Greșeli frecvente

  • Aștepți notificări de progres pentru fișiere locale. Funcția notification este apelată doar de wrapperele de rețea (http, ftp).

Comenzi înrudite

  • stream_context_create: Creează un set de opțiuni (metodă, antete, timeout) pentru file_get_contents, fopen și alte funcții de fișier.
  • stream_context_get_options: Returnează opțiunile unui context de stream (sau ale contextului folosit de un stream deschis).
  • file_get_contents: Citește tot conținutul unui fișier (sau al unei adrese URL) într-un text.