Función PHP gethostbynamel(): Todo lo que necesitas saber
Aprende a usar gethostbynamel() en PHP para obtener todas las direcciones IP IPv4 asociadas a un nombre de host mediante una búsqueda DNS.
Como desarrollador PHP, puede que necesites obtener todas las direcciones IP asociadas a un nombre de host determinado, no solo una. Un mismo dominio a menudo se resuelve en múltiples direcciones IP para balanceo de carga o redundancia. La función integrada gethostbynamel() se encarga de esto: realiza una búsqueda DNS y devuelve un array con todas las direcciones IPv4 asociadas a ese nombre de host.
Esta página explica qué devuelve gethostbynamel(), en qué se diferencia de la singular gethostbyname(), cómo manejar los fallos de forma segura y cuándo conviene utilizarla.
¿Qué es la función gethostbynamel()?
La función gethostbynamel() es una función integrada de PHP que recupera una lista de direcciones IPv4 correspondientes a un nombre de host de Internet dado. La l al final del nombre significa list (lista): es la hermana de gethostbyname() que devuelve un array, mientras que esta última solo devuelve una única dirección como string.
Internamente realiza una búsqueda de registros DNS de tipo A. Un sitio grande como google.com puede publicar varios registros A, por lo que gethostbynamel() te permite verlos todos en lugar de solo el primero.
Solo IPv4.
gethostbynamel()devuelve exclusivamente direcciones IPv4 (registrosA). No devolverá direcciones IPv6 (registrosAAAA). Para inspeccionar IPv6 u otros tipos de registros, usadns_get_record()en su lugar.
Cómo usar la función gethostbynamel()
Usar la función gethostbynamel() es sencillo. Esta es la sintaxis:
Sintaxis PHP de la función gethostbynamel()
gethostbynamel(string $hostname): array|falseLa función acepta un parámetro:
$hostname: El nombre de host del que quieres recuperar todas las direcciones IPv4 (por ejemplo,"www.example.com").
Valor de retorno
Devuelve un array indexado numéricamente de strings con direcciones IPv4 en caso de éxito, o false si el nombre de host no pudo resolverse.
A continuación se muestra un ejemplo de cómo usar la función gethostbynamel() para recuperar todas las direcciones IP asociadas a un nombre de host:
Cómo usar la función gethostbynamel()
En este ejemplo, recuperamos todas las direcciones IPv4 asociadas al nombre de host "example.com". La función realiza una búsqueda DNS y devuelve un array de direcciones. Luego recorremos el array y mostramos cada una. Observa la comparación estricta !== false: esto es importante porque un array vacío es "falsy", pero una búsqueda fallida devuelve el boolean false, por lo que comprobar false de forma explícita es la prueba segura e inequívoca.
Salida esperada
IP address for host name example.com is 93.184.216.34Las direcciones exactas que veas dependerán de los registros DNS actuales y de tu red, por lo que pueden diferir de la salida mostrada arriba.
gethostbynamel() vs gethostbyname()
Estas dos funciones son fáciles de confundir. La diferencia está en lo que devuelven:
| Función | Devuelve | Cuándo usarla |
|---|---|---|
gethostbyname() | Una única dirección IPv4 como string (o el nombre de host sin cambios en caso de fallo) | Cuando solo necesitas una dirección para conectarte. |
gethostbynamel() | Un array con todas las direcciones IPv4 (o false en caso de fallo) | Cuando necesitas ver todas las direcciones, por ejemplo, para detectar una CDN o un DNS round-robin. |
Un patrón habitual es contar cuántas direcciones anuncia un host:
<?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";
}Salida esperada
example.com resolves to 1 IPv4 address(es):
93.184.216.34Cuándo usar gethostbynamel()
- Detectar hosts multi-homed. Cuando un dominio se sirve desde varios servidores (DNS round-robin, una CDN),
gethostbynamel()revela el conjunto completo de direcciones. - Listas de permitidos / reglas de firewall. Resuelve un host a todas sus IPs antes de construir una lista de permitidos, para no omitir ninguno de los backends.
- Diagnósticos y monitoreo. Muestra todas las direcciones a las que se resuelve un nombre al diagnosticar problemas de conectividad.
Si necesitas soporte IPv6 u otros tipos de registros DNS (MX, TXT, CNAME), usa dns_get_record() o checkdnsrr() en su lugar.
Conclusión
La función gethostbynamel() recupera la lista completa de direcciones IPv4 asociadas a un nombre de host dado, a diferencia de gethostbyname(), que solo devuelve una. Al comprender su comportamiento exclusivo con IPv4, su valor de retorno false en caso de fallo y el manejo adecuado de errores, puedes integrarla de forma segura en tus aplicaciones PHP para búsquedas DNS, diagnósticos y listas de permitidos.