Funzione PHP gethostbynamel(): tutto quello che devi sapere
Scopri come usare la funzione PHP gethostbynamel() per ottenere tutti gli indirizzi IPv4 associati a un dato nome host tramite DNS lookup.
Come sviluppatore PHP, potresti avere la necessità di ottenere tutti gli indirizzi IP associati a un dato nome host, non solo uno. Un singolo dominio si risolve spesso in più indirizzi IP per bilanciamento del carico o ridondanza. La funzione integrata gethostbynamel() gestisce proprio questo: esegue un DNS lookup e restituisce un array con tutti gli indirizzi IPv4 associati a quel nome host.
Questa pagina spiega cosa restituisce gethostbynamel(), in cosa differisce dalla versione singola gethostbyname(), come gestire i fallimenti in modo sicuro e quando usarla.
Cos'è la funzione gethostbynamel()?
La funzione gethostbynamel() è una funzione built-in di PHP che recupera un elenco di indirizzi IPv4 corrispondenti a un dato nome host Internet. La l finale nel nome sta per list (elenco) — è la versione che restituisce un array di gethostbyname(), che invece restituisce un solo indirizzo come string.
Internamente, esegue un lookup del record DNS di tipo A. Un sito di grandi dimensioni come google.com può pubblicare diversi record A, quindi gethostbynamel() consente di vederli tutti anziché solo il primo.
Solo IPv4.
gethostbynamel()restituisce esclusivamente indirizzi IPv4 (recordA). Non restituirà indirizzi IPv6 (recordAAAA). Per ispezionare record IPv6 o altri tipi di record, usadns_get_record().
Come usare la funzione gethostbynamel()
Usare la funzione gethostbynamel() è semplice. Ecco la sintassi:
Sintassi PHP della funzione gethostbynamel()
gethostbynamel(string $hostname): array|falseLa funzione accetta un solo parametro:
$hostname: Il nome host per cui vuoi recuperare tutti gli indirizzi IPv4 (ad esempio,"www.example.com").
Valore di ritorno
Restituisce un array di string di indirizzi IPv4 con indice numerico in caso di successo, oppure false se il nome host non può essere risolto.
Ecco un esempio di come usare la funzione gethostbynamel() per recuperare tutti gli indirizzi IP associati a un nome host:
Come usare la funzione gethostbynamel()
In questo esempio, recuperiamo tutti gli indirizzi IPv4 associati al nome host "example.com". La funzione esegue un DNS lookup e restituisce un array di indirizzi. Quindi scorriamo l'array e visualizziamo ciascun indirizzo. Nota il confronto rigoroso !== false: questo è importante perché un array vuoto è "falsy", ma un lookup fallito restituisce il boolean false, quindi verificare esplicitamente false è il modo sicuro e non ambiguo.
Output atteso
IP address for host name example.com is 93.184.216.34Gli indirizzi esatti che vedi dipendono dai record DNS correnti e dalla tua rete, quindi potrebbero differire dall'output sopra.
gethostbynamel() vs gethostbyname()
Queste due funzioni possono essere facilmente confuse. La differenza sta in ciò che restituiscono:
| Funzione | Restituisce | Usa quando |
|---|---|---|
gethostbyname() | Un singolo indirizzo IPv4 come string (oppure il nome host invariato in caso di fallimento) | Hai bisogno di un solo indirizzo a cui connetterti. |
gethostbynamel() | Un array di tutti gli indirizzi IPv4 (oppure false in caso di fallimento) | Hai bisogno di vedere tutti gli indirizzi, ad esempio per rilevare una CDN o un DNS round-robin. |
Un pattern comune è contare quanti indirizzi un host pubblicizza:
<?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";
}Output atteso
example.com resolves to 1 IPv4 address(es):
93.184.216.34Quando usare gethostbynamel()
- Rilevare host multi-homed. Quando un dominio è servito da più server (DNS round-robin, una CDN),
gethostbynamel()rivela l'intero insieme di indirizzi. - Allowlist / regole firewall. Risolvi un host in tutti i suoi IP prima di costruire un'allowlist, così non ti sfugge nessuno dei backend.
- Diagnostica e monitoraggio. Mostra tutti gli indirizzi in cui si risolve un nome durante la risoluzione dei problemi di connettività.
Se hai bisogno del supporto IPv6 o di altri tipi di record DNS (MX, TXT, CNAME), usa dns_get_record() o checkdnsrr().
Conclusione
La funzione gethostbynamel() recupera l'elenco completo degli indirizzi IPv4 associati a un dato nome host, a differenza di gethostbyname(), che ne restituisce solo uno. Comprendendo il suo comportamento esclusivamente IPv4, il valore di ritorno false in caso di errore e la corretta gestione degli errori, puoi integrarla in modo sicuro nelle tue applicazioni PHP per DNS lookup, diagnostica e allowlisting.