PHP gethostbynamel()-Funktion: Alles, was Sie wissen müssen
Die PHP-Funktion gethostbynamel() gibt ein array aller IPv4-Adressen eines Hostnamens zurück. Syntax, Beispiele und Unterschied zu gethostbyname() erklärt.
Als PHP-Entwickler müssen Sie möglicherweise alle IP-Adressen ermitteln, die einem bestimmten Hostnamen zugeordnet sind – nicht nur eine. Eine einzige Domain wird häufig auf mehrere IP-Adressen aufgelöst, um Lastverteilung oder Redundanz zu gewährleisten. Die eingebaute Funktion gethostbynamel() übernimmt genau diese Aufgabe: Sie führt eine DNS-Abfrage durch und gibt ein array aller IPv4-Adressen zurück, die hinter diesem Hostnamen stehen.
Diese Seite erläutert, was gethostbynamel() zurückgibt, wie sie sich von der singulären gethostbyname() unterscheidet, wie Fehler sicher behandelt werden und wann der Einsatz sinnvoll ist.
Was ist die gethostbynamel()-Funktion?
Die Funktion gethostbynamel() ist eine PHP-Builtin-Funktion, die eine Liste von IPv4-Adressen abruft, die einem bestimmten Internet-Hostnamen entsprechen. Das abschließende l im Namen steht für list – sie ist die array-zurückgebende Geschwisterfunktion von gethostbyname(), die nur eine einzige Adresse als string zurückgibt.
Intern führt sie eine DNS-A-Record-Abfrage durch. Eine große Website wie google.com kann mehrere A-Records veröffentlichen, sodass gethostbynamel() alle davon anzeigt und nicht nur den ersten.
Nur IPv4.
gethostbynamel()gibt ausschließlich IPv4-Adressen (A-Records) zurück. IPv6-Adressen (AAAA-Records) werden nicht zurückgegeben. Um IPv6 oder andere Record-Typen abzufragen, verwenden Sie stattdessendns_get_record().
Wie wird die gethostbynamel()-Funktion verwendet?
Die Verwendung der Funktion gethostbynamel() ist unkompliziert. Hier ist die Syntax:
Die PHP-Syntax der gethostbynamel()-Funktion
gethostbynamel(string $hostname): array|falseDie Funktion akzeptiert einen Parameter:
$hostname: Der Hostname, für den alle IPv4-Adressen abgerufen werden sollen (zum Beispiel"www.example.com").
Rückgabewert
Gibt bei Erfolg ein numerisch indiziertes array von IPv4-Adress-strings zurück oder false, wenn der Hostname nicht aufgelöst werden konnte.
Hier ist ein Beispiel, wie die Funktion gethostbynamel() verwendet wird, um alle IP-Adressen eines Hostnamens abzurufen:
Verwendung der gethostbynamel()-Funktion
In diesem Beispiel rufen wir alle IPv4-Adressen ab, die dem Hostnamen „example.com" zugeordnet sind. Die Funktion führt eine DNS-Abfrage durch und gibt ein array von Adressen zurück. Anschließend iterieren wir über das array und geben jede Adresse aus. Beachten Sie den strikten Vergleich !== false: Dies ist wichtig, weil ein leeres array als „falsy" gilt, ein fehlgeschlagener Lookup jedoch den boolean false zurückgibt – der explizite Vergleich auf false ist daher der sichere und eindeutige Test.
Erwartete Ausgabe
IP address for host name example.com is 93.184.216.34Die genauen Adressen hängen von den aktuellen DNS-Records und Ihrem Netzwerk ab und können daher von der obigen Ausgabe abweichen.
gethostbynamel() vs. gethostbyname()
Diese beiden Funktionen werden leicht verwechselt. Der Unterschied liegt in dem, was sie zurückgeben:
| Funktion | Gibt zurück | Verwenden wenn |
|---|---|---|
gethostbyname() | Eine einzelne IPv4-Adresse als string (oder den unveränderten Hostnamen bei Fehler) | Sie nur eine Adresse zum Verbinden benötigen. |
gethostbynamel() | Ein array aller IPv4-Adressen (oder false bei Fehler) | Sie alle Adressen sehen müssen, z. B. um ein CDN oder Round-Robin-DNS zu erkennen. |
Ein gängiges Muster ist, die Anzahl der von einem Host bekannt gegebenen Adressen zu zählen:
<?php
$hostname = "example.com";
$addresses = gethostbynamel($hostname);
if ($addresses === false) {
echo "Could not resolve $hostname\n";
} else {
echo $hostname . " resolves to " . count($addresses) . " IPv4 address(es):\n";
echo implode(", ", $addresses) . "\n";
}Erwartete Ausgabe
example.com resolves to 1 IPv4 address(es):
93.184.216.34Wann sollte gethostbynamel() verwendet werden?
- Erkennung von Multi-Homed-Hosts. Wenn eine Domain von mehreren Servern bereitgestellt wird (Round-Robin-DNS, ein CDN), gibt
gethostbynamel()die vollständige Liste der Adressen zurück. - Allowlisting / Firewall-Regeln. Lösen Sie einen Host in alle seine IP-Adressen auf, bevor Sie eine Allowlist erstellen, damit kein Backend übersehen wird.
- Diagnose und Monitoring. Zeigen Sie alle Adressen an, auf die ein Name aufgelöst wird, wenn Konnektivitätsprobleme behoben werden sollen.
Wenn Sie IPv6-Unterstützung oder andere DNS-Record-Typen (MX, TXT, CNAME) benötigen, verwenden Sie stattdessen dns_get_record() oder checkdnsrr().
Fazit
Die Funktion gethostbynamel() ruft die vollständige Liste der IPv4-Adressen ab, die einem bestimmten Hostnamen zugeordnet sind – im Gegensatz zu gethostbyname(), die nur eine zurückgibt. Wenn Sie ihr IPv4-exklusives Verhalten, ihren false-Rückgabewert bei Fehler und die korrekte Fehlerbehandlung verstehen, können Sie sie sicher in Ihre PHP-Anwendungen für DNS-Abfragen, Diagnosen und Allowlisting integrieren.