Start · Sprachen · PHP · Referenz · Context parameters

Context parameters

Funktion

Kontextparameter steuern das Verhalten von Stream-Kontexten und ermöglichen z. B. Callback-Funktionen und andere Meta-Einstellungen für <code>stream_context_create()</code>.

seit PHP 4.3.0 Kategorie: misc

Signatur

stream_context_create(array $options = [], array $params = []): resource

Beschreibung

In PHP können Stream-Kontexte mit zwei verschiedenen Arten von Konfigurationen versehen werden: Optionen (wrapper-spezifische Einstellungen wie HTTP-Header oder SSL-Zertifikate) und Kontextparameter. Letztere sind allgemeine, wrapper-unabhängige Einstellungen, die das grundlegende Verhalten des Kontexts selbst beeinflussen.

Der bekannteste und wichtigste Kontextparameter ist notification. Dabei handelt es sich um einen Callable, der aufgerufen wird, wenn ein Ereignis auf dem Stream auftritt – z. B. wenn Daten empfangen werden, ein Redirect stattfindet oder ein Authentifizierungsfehler auftritt. Die Callback-Funktion erhält dabei mehrere Parameter, darunter den Benachrichtigungscode ($notification_code), den Schweregrad, eine Meldung, einen Meldungscode sowie Byte-Informationen zum Fortschritt.

Kontextparameter werden als zweites Argument an stream_context_create() übergeben oder nachträglich über stream_context_set_params() gesetzt. Sie sind damit vom ersten Argument ($options) getrennt, das wrapper-spezifische Optionen enthält.

Typische Einsatzgebiete sind die Fortschrittsüberwachung bei Datei-Downloads, das Protokollieren von Verbindungsereignissen oder die benutzerdefinierte Fehlerbehandlung bei Stream-Operationen.

Parameter

Name Typ Default Beschreibung
$options array [] Assoziatives Array mit wrapper-spezifischen Stream-Optionen, z. B. ['http' => ['method' => 'GET']].
$params array [] Assoziatives Array mit Kontextparametern. Aktuell unterstützter Parameter: notification (ein Callable, der bei Stream-Ereignissen aufgerufen wird).

Rückgabewert

Typ
resource
Beschreibung
Gibt eine Stream-Kontext-Ressource zurück, die an Datei- und Stream-Funktionen wie file_get_contents(), fopen() oder copy() übergeben werden kann.

Beispiele

Fortschrittsüberwachung mit dem notification-Callback

<?php
function stream_notification_callback(
    int $notification_code,
    int $severity,
    ?string $message,
    int $message_code,
    int $bytes_transferred,
    int $bytes_max
): void {
    switch ($notification_code) {
        case STREAM_NOTIFY_RESOLVE:
            echo "Host aufgelöst.\n";
            break;
        case STREAM_NOTIFY_CONNECT:
            echo "Verbindung hergestellt.\n";
            break;
        case STREAM_NOTIFY_FILE_SIZE_IS:
            echo "Dateigröße: {$bytes_max} Bytes\n";
            break;
        case STREAM_NOTIFY_PROGRESS:
            echo "Empfangen: {$bytes_transferred} / {$bytes_max} Bytes\n";
            break;
        case STREAM_NOTIFY_COMPLETED:
            echo "Download abgeschlossen.\n";
            break;
        case STREAM_NOTIFY_FAILURE:
            echo "Fehler ({$message_code}): {$message}\n";
            break;
    }
}

$context = stream_context_create(
    ['http' => ['method' => 'GET']],
    ['notification' => 'stream_notification_callback']
);

$data = file_get_contents('https://www.example.com/', false, $context);
echo "Geladene Bytes: " . strlen($data) . "\n";
Host aufgelöst. Verbindung hergestellt. Dateigröße: 1256 Bytes Empfangen: 1256 / 1256 Bytes Download abgeschlossen. Geladene Bytes: 1256

Kontextparameter nachträglich setzen mit stream_context_set_params()

<?php
$context = stream_context_create(['http' => ['method' => 'GET']]);

// Notification-Callback nachträglich hinzufügen
stream_context_set_params($context, [
    'notification' => function (
        int $code,
        int $severity,
        ?string $message,
        int $msgCode,
        int $transferred,
        int $max
    ): void {
        if ($code === STREAM_NOTIFY_FAILURE) {
            error_log("Stream-Fehler [{$msgCode}]: {$message}");
        }
    }
]);

// Kontext beim Öffnen eines Streams verwenden
$fp = fopen('https://www.example.com/', 'r', false, $context);
if ($fp) {
    echo stream_get_contents($fp);
    fclose($fp);
}

// Wichtig · Fallstricke

Wichtige Kontextparameter-Konstanten für den notification-Callback:

  • STREAM_NOTIFY_RESOLVE – Hostname wurde aufgelöst
  • STREAM_NOTIFY_CONNECT – Verbindung wurde aufgebaut
  • STREAM_NOTIFY_AUTH_REQUIRED – Authentifizierung erforderlich
  • STREAM_NOTIFY_AUTH_RESULT – Authentifizierungsergebnis
  • STREAM_NOTIFY_REDIRECTED – Stream wurde weitergeleitet
  • STREAM_NOTIFY_FILE_SIZE_IS – Dateigröße bekannt
  • STREAM_NOTIFY_MIME_TYPE_IS – MIME-Typ bekannt
  • STREAM_NOTIFY_PROGRESS – Übertragungsfortschritt
  • STREAM_NOTIFY_COMPLETED – Übertragung abgeschlossen
  • STREAM_NOTIFY_FAILURE – Fehler aufgetreten

Beachte, dass nicht alle Wrapper alle Benachrichtigungscodes unterstützen. HTTP- und FTP-Wrapper haben die umfangreichste Unterstützung. Bei lokal eingebundenen Dateien werden viele Ereignisse nicht ausgelöst.