Start · Sprachen · PHP · Referenz · stream_context_set_default

stream_context_set_default

Funktion

Setzt den Standard-Stream-Kontext, der bei Stream-Funktionen ohne expliziten Kontext automatisch verwendet wird.

seit PHP 5.3.0 Kategorie: io

Signatur

stream_context_set_default(array $options): resource

Beschreibung

stream_context_set_default() legt einen globalen Standard-Stream-Kontext fest, der von Funktionen wie file_get_contents(), fopen(), copy() usw. automatisch genutzt wird, wenn diesen kein eigener Kontext übergeben wird. Damit lassen sich HTTP-Optionen (z. B. Timeout, User-Agent, Proxy) oder andere Stream-Parameter einmalig zentral konfigurieren.

Die Funktion ähnelt stream_context_create(), schreibt den erstellten Kontext jedoch direkt als Systemstandard. Der Rückgabewert ist die Ressource des neuen Standard-Kontexts, was es ermöglicht, ihn anschließend weiter zu modifizieren.

Typische Anwendungsfälle sind Anwendungen, die viele HTTP-Requests mit identischen Einstellungen durchführen, oder Testumgebungen, in denen HTTP-Optionen global überschrieben werden sollen, ohne jede einzelne Funktion anzupassen.

Zu beachten ist, dass dieser Kontext global gilt – nachfolgende Stream-Operationen im gesamten Skript werden beeinflusst, sofern kein lokaler Kontext angegeben wird. Für isolierte Kontexte empfiehlt sich stattdessen stream_context_create().

Parameter

Name Typ Default Beschreibung
$options Pflicht array Assoziatives Array mit Stream-Wrapper-Optionen. Die Struktur entspricht der von stream_context_create(): ['wrapper' => ['option' => 'wert']], z. B. ['http' => ['timeout' => 30]].

Rückgabewert

Typ
resource
Beschreibung
Gibt die Ressource des neuen Standard-Stream-Kontexts zurück. Diese kann nachträglich mit stream_context_set_option() erweitert werden.

Beispiele

HTTP-Timeout und User-Agent global setzen

<?php
// Standard-Kontext für alle nachfolgenden HTTP-Streams setzen
$defaultContext = stream_context_set_default([
    'http' => [
        'timeout'     => 10,
        'user_agent'  => 'MeinPHP-Client/1.0',
        'method'      => 'GET',
    ]
]);

// Kein expliziter Kontext nötig – der Standard greift automatisch
$html = file_get_contents('https://example.com');
echo $html ? 'Inhalt geladen.' : 'Fehler beim Laden.';
Inhalt geladen.

Standard-Kontext mit HTTP-Proxy konfigurieren

<?php
// Proxy global für alle HTTP-Streams aktivieren
stream_context_set_default([
    'http' => [
        'proxy'           => 'tcp://proxy.example.com:8080',
        'request_fulluri' => true,
        'timeout'         => 15,
    ]
]);

// Alle folgenden file_get_contents-Aufrufe laufen automatisch über den Proxy
$data = file_get_contents('http://api.example.com/data');
if ($data !== false) {
    $json = json_decode($data, true);
    print_r($json);
} else {
    echo 'Anfrage fehlgeschlagen.';
}

// Wichtig · Fallstricke

Globale Wirkung: Der gesetzte Standard-Kontext gilt für den gesamten weiteren Skriptablauf. Wird er in einer frühen Bootstrap-Phase gesetzt, können unbeabsichtigt alle späteren Stream-Operationen beeinflusst werden – auch solche in eingebundenen Bibliotheken, die keinen eigenen Kontext angeben.

Sicherheit: Bei Verwendung in HTTP-Kontexten sollte verify_peer für SSL/TLS nie auf false gesetzt werden, da sonst Man-in-the-Middle-Angriffe möglich sind. Standardmäßig ist die Zertifikatsprüfung aktiv und sollte so belassen werden.

Um den aktuellen Standard-Kontext abzurufen, kann stream_context_get_default() verwendet werden.