Start · Sprachen · PHP · Referenz · stream_get_transports

stream_get_transports

Funktion

Gibt eine Liste aller im aktuellen PHP-System registrierten Socket-Transporte (z. B. <code>tcp</code>, <code>udp</code>, <code>ssl</code>) zurück.

seit PHP 5.0.0 Kategorie: io

Signatur

stream_get_transports(): array

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

Typ
array
Beschreibung
Ein indiziertes Array von Strings, das die Namen aller registrierten Socket-Transporte enthält (z. B. ['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;
}
Verfügbare Socket-Transporte: - tcp - udp - unix - udg - ssl - tls - tlsv1.0 - tlsv1.1 - tlsv1.2 - tlsv1.3

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;
}
SSL-Verbindung erfolgreich hergestellt.

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