Signatur
Beschreibung
socket_addrinfo_explain() analysiert eine AddressInfo-Ressource (bzw. ab PHP 8.0 ein AddressInfo-Objekt), die zuvor über socket_addrinfo_lookup() ermittelt wurde, und gibt deren Inhalte als assoziatives PHP-Array zurück. So können Programmierer die Eigenschaften einer Netzwerkadresse (Adressfamilie, Socket-Typ, Protokoll, tatsächliche Adresse usw.) auslesen, ohne direkt mit der internen C-Struktur arbeiten zu müssen.
Das zurückgegebene Array enthält typischerweise die Schlüssel ai_flags, ai_family, ai_socktype, ai_protocol und ai_addr. Der Schlüssel ai_addr ist selbst wieder ein Array mit den Schlüsseln sin_port (bei IPv4/IPv6) und sin_addr bzw. sin6_addr für die eigentliche IP-Adresse.
Die Funktion ist besonders nützlich, wenn man mehrere von socket_addrinfo_lookup() gelieferte Einträge vor dem Verbindungsaufbau prüfen und filtern möchte, z. B. um ausschließlich IPv6-Adressen oder nur TCP-Sockets auszuwählen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $address Pflicht | AddressInfo | Ein AddressInfo-Objekt, wie es von socket_addrinfo_lookup() zurückgegeben wird. |
Rückgabewert
addrinfo-Struktur. Enthält mindestens die Schlüssel ai_flags, ai_family, ai_socktype, ai_protocol und ai_addr.Beispiele
Adressinformationen zu einem Hostnamen auflesen
<?php
// Adressinformationen für 'example.com' auf Port 443 abfragen
$hints = [
'ai_family' => AF_UNSPEC,
'ai_socktype' => SOCK_STREAM,
];
$addrinfos = socket_addrinfo_lookup('example.com', '443', $hints);
if ($addrinfos === false) {
die('Lookup fehlgeschlagen: ' . socket_strerror(socket_last_error()));
}
foreach ($addrinfos as $addrinfo) {
$info = socket_addrinfo_explain($addrinfo);
echo 'Familie : ' . $info['ai_family'] . PHP_EOL;
echo 'Typ : ' . $info['ai_socktype'] . PHP_EOL;
echo 'Protokoll: ' . $info['ai_protocol'] . PHP_EOL;
echo 'Adresse : ' . $info['ai_addr']['sin_addr'] . PHP_EOL;
echo '---' . PHP_EOL;
}
Nur IPv6-Adressen aus dem Lookup-Ergebnis filtern
<?php
$hints = [
'ai_family' => AF_UNSPEC,
'ai_socktype' => SOCK_STREAM,
];
$addrinfos = socket_addrinfo_lookup('example.com', '80', $hints);
$ipv6Only = array_filter($addrinfos, function (AddressInfo $ai): bool {
$info = socket_addrinfo_explain($ai);
return $info['ai_family'] === AF_INET6;
});
foreach ($ipv6Only as $ai) {
$info = socket_addrinfo_explain($ai);
echo 'IPv6-Adresse: ' . ($info['ai_addr']['sin6_addr'] ?? 'unbekannt') . PHP_EOL;
}
// Wichtig · Fallstricke
PHP-Version: Ab PHP 8.0 werden addrinfo-Ressourcen als AddressInfo-Objekte repräsentiert. In PHP 7.2–7.4 handelt es sich noch um Ressourcen (resource).
Die Schlüssel und Werte des zurückgegebenen Arrays entsprechen den Konstanten der Socket-Erweiterung (z. B. AF_INET, AF_INET6, SOCK_STREAM). Ein direkter Vergleich mit diesen Konstanten ist empfehlenswert.
Nicht alle Schlüssel sind auf jedem Betriebssystem vorhanden; fehlende Einträge sollten mit isset() geprüft werden.