Signatur
Beschreibung
Der http://- und https://-Stream-Wrapper ermöglicht es, entfernte HTTP- und HTTPS-Ressourcen direkt über PHP-Datei- und Stream-Funktionen wie file_get_contents(), fopen(), copy() oder readfile() anzusprechen. Dabei wird eine HTTP/1.0-GET-Anfrage an die angegebene URL gesendet und der Antwort-Body als lesebarer Datenstrom bereitgestellt.
Der Wrapper unterstützt sowohl unverschlüsselte Verbindungen (http://) als auch TLS-verschlüsselte Verbindungen (https://). Letzteres erfordert, dass PHP mit OpenSSL-Unterstützung kompiliert wurde. Weiterleitungen (HTTP 3xx) werden standardmäßig automatisch bis zu einer konfigurierbaren Tiefe verfolgt.
Über einen Stream-Kontext (erstellt mit stream_context_create()) lassen sich HTTP-Methode, Header, Body, Timeout, Proxy-Server, SSL-Optionen und weitere Parameter anpassen. So können auch POST-Anfragen, Authentifizierungen und benutzerdefinierte Header realisiert werden.
Für komplexere Anwendungsfälle wie parallele Anfragen, Session-Verwaltung oder vollständige Kontrolle über TLS-Optionen ist eine dedizierte HTTP-Bibliothek wie cURL (über die curl_*-Funktionen) oder Guzzle vorzuziehen.
Beispiele
Einfache HTTP-GET-Anfrage mit file_get_contents
<?php
// Inhalt einer URL als String laden
$response = file_get_contents('https://www.example.com/');
if ($response === false) {
echo 'Fehler beim Abrufen der URL.';
} else {
echo 'Empfangene Bytes: ' . strlen($response);
}
HTTP-POST-Anfrage mit Stream-Kontext
<?php
$url = 'https://httpbin.org/post';
$data = http_build_query(['name' => 'Max', 'sprache' => 'PHP']);
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/x-www-form-urlencoded\r\n" .
"Content-Length: " . strlen($data) . "\r\n",
'content' => $data,
'timeout' => 10,
],
]);
$response = file_get_contents($url, false, $context);
if ($response !== false) {
$json = json_decode($response, true);
echo 'Gesendet: ' . print_r($json['form'] ?? [], true);
} else {
echo 'Anfrage fehlgeschlagen.';
}
Zugriff auf HTTP-Response-Header nach file_get_contents
<?php
$url = 'https://www.example.com/';
$response = file_get_contents($url);
// $http_response_header wird nach dem Aufruf automatisch befüllt
foreach ($http_response_header as $header) {
echo $header . PHP_EOL;
}
// Wichtig · Fallstricke
Sicherheitshinweis: Wenn URLs dynamisch aus Benutzereingaben stammen, besteht die Gefahr von Server-Side Request Forgery (SSRF). Validiere und whiteliste erlaubte Hosts, bevor du eine URL abrufst.
Der https://-Wrapper prüft standardmäßig das SSL-Zertifikat des Servers. Das Deaktivieren der Zertifikatsprüfung ('verify_peer' => false) ist in Produktivumgebungen nicht empfehlenswert, da es Man-in-the-Middle-Angriffe ermöglicht.
Die Direktive allow_url_fopen in der php.ini muss auf On gesetzt sein, damit http://- und https://-URLs in Dateifunktionen verwendet werden können. allow_url_include (für include/require) ist aus Sicherheitsgründen standardmäßig deaktiviert und sollte es bleiben.
Der Wrapper unterstützt nur lesenden Zugriff (read); schreibende Operationen sind nicht möglich. Für komplexe Szenarien (Cookies, Redirects, Verbindungs-Pooling) empfiehlt sich die Verwendung von curl.