Signatur
Beschreibung
stream_get_transports() liefert ein indiziertes Array mit den Namen aller Socket-Transporte, die in der aktuellen PHP-Installation verfügbar sind. Typische Einträge sind tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2 und tlsv1.3, wobei die genaue Liste vom Betriebssystem, der PHP-Konfiguration und den kompilierten Erweiterungen abhängt.
Die Funktion ist besonders nützlich, um vor dem Aufbau einer Netzwerkverbindung zu prüfen, ob ein benötigter Transport (z. B. ssl) auf dem aktuellen System verfügbar ist. So können Laufzeitfehler vermieden und Fallback-Logik implementiert werden.
Ergänzend dazu existieren die verwandten Funktionen stream_get_wrappers() für Protokoll-Wrapper (wie http, ftp) und stream_get_filters() für Stream-Filter. Transporte betreffen die Transport-Schicht (Socket-Verbindungen), während Wrapper die Protokoll-Schicht abbilden.
Rückgabewert
['tcp', 'udp', 'unix', 'udg', 'ssl', 'tls']). Das Array ist nie false oder null; im Extremfall (keine Transporte) wird ein leeres Array zurückgegeben.Beispiele
Alle verfügbaren Transporte ausgeben
<?php
$transports = stream_get_transports();
echo "Verfügbare Socket-Transporte:" . PHP_EOL;
foreach ($transports as $transport) {
echo " - " . $transport . PHP_EOL;
}
Prüfen ob SSL-Transport verfügbar ist, bevor eine sichere Verbindung aufgebaut wird
<?php
$transports = stream_get_transports();
if (in_array('ssl', $transports, true)) {
$context = stream_context_create([
'ssl' => [
'verify_peer' => true,
'verify_peer_name' => true,
],
]);
$socket = stream_socket_client(
'ssl://example.com:443',
$errno,
$errstr,
30,
STREAM_CLIENT_CONNECT,
$context
);
if ($socket) {
echo "SSL-Verbindung erfolgreich hergestellt." . PHP_EOL;
fclose($socket);
} else {
echo "Verbindungsfehler: [{$errno}] {$errstr}" . PHP_EOL;
}
} else {
echo "SSL-Transport ist auf diesem System nicht verfügbar." . PHP_EOL;
}
// Wichtig · Fallstricke
Die Verfügbarkeit von SSL/TLS-Transporten hängt davon ab, ob PHP mit OpenSSL-Unterstützung kompiliert wurde (Erweiterung openssl). Auf Systemen ohne OpenSSL fehlen ssl, tls und alle tlsv*-Einträge. Verwende daher immer in_array() mit striktem Vergleich (true als dritten Parameter), um Transporte zu prüfen.
Unix-Socket-Transporte (unix, udg) sind auf Windows-Systemen in der Regel nicht verfügbar.