Fonction PHP gethostbynamel() : tout ce que vous devez savoir
Découvrez comment utiliser la fonction PHP gethostbynamel() pour récupérer toutes les adresses IPv4 associées à un nom d'hôte donné.
En tant que développeur PHP, vous pouvez avoir besoin d'obtenir toutes les adresses IP associées à un nom d'hôte donné, et pas seulement une seule. Un même domaine pointe souvent vers plusieurs adresses IP pour la répartition de charge ou la redondance. La fonction intégrée gethostbynamel() répond à ce besoin : elle effectue une résolution DNS et retourne un array de toutes les adresses IPv4 associées à ce nom d'hôte.
Cette page explique ce que retourne gethostbynamel(), en quoi elle diffère de la fonction singulière gethostbyname(), comment gérer les échecs en toute sécurité, et dans quels cas vous auriez recours à elle.
Qu'est-ce que la fonction gethostbynamel() ?
La fonction gethostbynamel() est une fonction intégrée PHP qui récupère une liste d'adresses IPv4 correspondant à un nom d'hôte Internet donné. Le l final dans le nom signifie list (liste) — il s'agit de la version retournant un array de gethostbyname(), qui ne retourne qu'une seule adresse sous forme de string.
En interne, elle effectue une requête DNS sur les enregistrements A. Un grand site comme google.com peut publier plusieurs enregistrements A, donc gethostbynamel() vous permet de tous les voir plutôt qu'uniquement le premier.
IPv4 uniquement.
gethostbynamel()retourne exclusivement des adresses IPv4 (enregistrementsA). Elle ne retournera pas les adresses IPv6 (enregistrementsAAAA). Pour inspecter l'IPv6 ou d'autres types d'enregistrements, utilisez plutôtdns_get_record().
Comment utiliser la fonction gethostbynamel() ?
L'utilisation de la fonction gethostbynamel() est simple. Voici la syntaxe :
Syntaxe PHP de la fonction gethostbynamel()
gethostbynamel(string $hostname): array|falseLa fonction prend un paramètre :
$hostname: Le nom d'hôte pour lequel vous souhaitez récupérer toutes les adresses IPv4 (par exemple,"www.example.com").
Valeur de retour
Retourne un array indexé numériquement de strings d'adresses IPv4 en cas de succès, ou false si le nom d'hôte n'a pas pu être résolu.
Voici un exemple d'utilisation de la fonction gethostbynamel() pour récupérer toutes les adresses IP associées à un nom d'hôte :
Comment utiliser la fonction gethostbynamel()
Dans cet exemple, nous récupérons toutes les adresses IPv4 associées au nom d'hôte « example.com ». La fonction effectue une résolution DNS et retourne un array d'adresses. Nous parcourons ensuite cet array et affichons chaque adresse. Notez la comparaison stricte !== false : elle est importante car un array vide est « falsy », mais un échec de résolution retourne le boolean false, donc vérifier explicitement false est le test sûr et sans ambiguïté.
Résultat attendu
IP address for host name example.com is 93.184.216.34Les adresses exactes que vous obtenez dépendent des enregistrements DNS actuels et de votre réseau, elles peuvent donc différer de la sortie ci-dessus.
gethostbynamel() vs gethostbyname()
Ces deux fonctions sont faciles à confondre. La différence réside dans ce qu'elles retournent :
| Fonction | Retourne | À utiliser quand |
|---|---|---|
gethostbyname() | Une seule adresse IPv4 sous forme de string (ou le nom d'hôte inchangé en cas d'échec) | Vous n'avez besoin que d'une adresse pour vous connecter. |
gethostbynamel() | Un array de toutes les adresses IPv4 (ou false en cas d'échec) | Vous avez besoin de voir toutes les adresses, par ex. pour détecter un CDN ou un DNS round-robin. |
Un cas courant consiste à compter le nombre d'adresses qu'un hôte annonce :
<?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";
}Résultat attendu
example.com resolves to 1 IPv4 address(es):
93.184.216.34Quand utiliser gethostbynamel() ?
- Détecter les hôtes multi-adresses. Quand un domaine est servi depuis plusieurs serveurs (DNS round-robin, un CDN),
gethostbynamel()révèle l'ensemble complet des adresses. - Listes d'autorisation / règles de pare-feu. Résolvez un hôte vers toutes ses IP avant de construire une liste d'autorisation, afin de ne manquer aucun des backends.
- Diagnostics et surveillance. Affichez toutes les adresses vers lesquelles un nom est résolu lors du dépannage de la connectivité.
Si vous avez besoin de la prise en charge IPv6 ou d'autres types d'enregistrements DNS (MX, TXT, CNAME), utilisez plutôt dns_get_record() ou checkdnsrr().
Conclusion
La fonction gethostbynamel() récupère la liste complète des adresses IPv4 associées à un nom d'hôte donné, contrairement à gethostbyname() qui n'en retourne qu'une seule. En comprenant son comportement limité à l'IPv4, sa valeur de retour false en cas d'échec, et la gestion correcte des erreurs, vous pouvez l'intégrer en toute sécurité dans vos applications PHP pour les résolutions DNS, les diagnostics et les listes d'autorisation.