Signatur
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
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.