Start · Sprachen · PHP · Referenz · stream_context_get_default

stream_context_get_default

Funktion

Liefert den Standard-Stream-Kontext, der für alle Datei- und Stream-Operationen ohne expliziten Kontext verwendet wird.

seit PHP 5.1.0 Kategorie: io

Signatur

stream_context_get_default(?array $options = null): resource

Beschreibung

stream_context_get_default() gibt den globalen Standard-Stream-Kontext zurück, der PHP-intern für alle Stream-Operationen genutzt wird, bei denen kein eigener Kontext übergeben wird – beispielsweise bei file_get_contents(), fopen() oder include. Dadurch lassen sich Einstellungen wie HTTP-Header, Timeouts oder Proxy-Konfigurationen einmalig zentral festlegen.

Wird das optionale Array $options übergeben, werden die enthaltenen Optionen in den Standard-Kontext eingebunden (Merge), bevor dieser zurückgegeben wird. Das Format entspricht dem, das auch stream_context_create() erwartet: ein verschachteltes Array der Form ['wrapper' => ['option' => 'wert']].

Typische Anwendungsfälle sind das globale Setzen eines HTTP-User-Agents, das Konfigurieren eines SSL-Kontexts (z. B. Zertifikatspfade) oder das Definieren eines Standard-Proxys für alle ausgehenden HTTP-Verbindungen in einer Anwendung.

Im Gegensatz zu stream_context_set_default() (ab PHP 5.3.0) kann diese Funktion sowohl lesen als auch gleichzeitig Optionen setzen. Für rein lesende Zugriffe auf den Kontext genügt ein Aufruf ohne Argument.

Parameter

Name Typ Default Beschreibung
$options array|null null Optionales verschachteltes Array mit Wrapper-Optionen der Form ['wrapper' => ['option' => 'wert']]. Diese Werte werden in den bestehenden Standard-Kontext eingearbeitet. Wird null oder kein Argument übergeben, bleibt der Kontext unverändert.

Rückgabewert

Typ
resource
Beschreibung
Gibt eine Stream-Kontext-Ressource zurück, die den aktuellen (ggf. aktualisierten) Standard-Kontext repräsentiert.

Beispiele

Standard-Kontext lesen und HTTP-User-Agent global setzen

<?php
// Standard-Kontext abrufen und gleichzeitig HTTP-Optionen setzen
$defaultContext = stream_context_get_default([
    'http' => [
        'user_agent'     => 'MeineApp/1.0 (programmierung.net)',
        'timeout'        => 10,
        'follow_location'=> 1,
    ],
]);

// Ab jetzt nutzen alle Streams ohne expliziten Kontext diese Einstellungen
$inhalt = file_get_contents('https://example.com');
echo substr($inhalt, 0, 100);

Bestehenden Standard-Kontext auslesen

<?php
// Standard-Kontext ohne Änderungen abrufen
$ctx = stream_context_get_default();

// Aktuelle Optionen anzeigen
$optionen = stream_context_get_options($ctx);
print_r($optionen);

// Beispielhafte Ausgabe wenn HTTP-Optionen bereits gesetzt wurden:
// Array
// (
//     [http] => Array
//         (
//             [user_agent] => MeineApp/1.0 (programmierung.net)
//             [timeout] => 10
//         )
// )

Globalen SSL-Kontext konfigurieren

<?php
// SSL-Verifikation global konfigurieren (nur für Testzwecke deaktiviert)
stream_context_get_default([
    'ssl' => [
        'verify_peer'      => true,
        'verify_peer_name' => true,
        'cafile'           => '/etc/ssl/certs/ca-certificates.crt',
    ],
]);

// Alle nachfolgenden HTTPS-Requests nutzen diese SSL-Einstellungen
$data = file_get_contents('https://api.example.com/daten');
echo $data;

// Wichtig · Fallstricke

Sicherheitshinweis: Deaktivieren Sie verify_peer oder verify_peer_name im SSL-Kontext niemals in Produktionsumgebungen. Dies öffnet Man-in-the-Middle-Angriffe.

Globale Auswirkungen: Da dieser Kontext anwendungsweit gilt, können unbeabsichtigte Seiteneffekte entstehen, wenn Libraries oder Framework-Komponenten ebenfalls auf Streams zugreifen. Für isolierte Anfragen ist es sicherer, einen eigenen Kontext per stream_context_create() zu erstellen und diesen explizit zu übergeben.

Ab PHP 5.3.0 steht stream_context_set_default() zur Verfügung, das ausschließlich zum Setzen von Optionen dient und klarer in der Absicht kommuniziert.