Función PHP dns_check_record(): Todo lo que necesitas saber
Aprende a verificar registros DNS en PHP con dns_check_record(), checkdnsrr() y dns_get_record() con ejemplos prácticos.
Como desarrollador PHP, puede que necesites verificar registros DNS o comprobar si existe un registro específico para un dominio — por ejemplo, para validar que un dominio de correo electrónico puede recibir mensajes antes de aceptar un registro. Históricamente, la función dns_check_record() se utilizaba para este propósito.
Importante:
dns_check_record()era simplemente un alias decheckdnsrr(). El nombre del aliasdns_check_record()fue deprecado en PHP 7.3 y eliminado en PHP 8.0 — perocheckdnsrr()en sí no está deprecado y sigue funcionando en todas las versiones modernas de PHP. Por tanto, en PHP 8+ tienes dos alternativas: llamar acheckdnsrr()para obtener una respuesta sí/no simple, o llamar adns_get_record()cuando también necesites los datos del registro.
Este tutorial explica la función heredada y ambas alternativas modernas.
¿Qué es la función dns_check_record()?
La función dns_check_record() era una función integrada de PHP que comprobaba si existía un tipo específico de registro DNS para un nombre de dominio dado. Devolvía un valor boolean: true si existía al menos un registro coincidente, y false en caso contrario. Como el nombre dns_check_record() fue eliminado en PHP 8.0, llamarlo en una instalación moderna provoca un error fatal Call to undefined function.
Para migrar, haz una búsqueda y reemplazo literal: dns_check_record( se convierte en checkdnsrr(. Los parámetros y el comportamiento son idénticos.
Cómo usar la función dns_check_record()
Usar la función heredada dns_check_record() era sencillo. Esta es su sintaxis:
La sintaxis de la función PHP dns_check_record()
dns_check_record($host, $type);La función acepta dos parámetros:
$host: El nombre de dominio que deseas comprobar.$type: El tipo de registro DNS que deseas comprobar, como string ("A","MX","NS", …). Este parámetro es opcional y tiene como valor predeterminado"MX"si no se especifica.
Opción 1: checkdnsrr() — una comprobación sí/no simple
Si todo lo que necesitas es una respuesta boolean ("¿tiene este dominio un registro de este tipo?"), checkdnsrr() es el reemplazo directo. Su firma es la misma:
Opción 2: dns_get_record() — cuando necesitas los datos del registro
Si quieres los valores reales del registro (direcciones IP, nombres de host de servidores de correo, prioridades) en lugar de solo un boolean, usa dns_get_record(). Devuelve un array de registros cuando los encuentra, o un array vacío en caso de fallo. Ten en cuenta que utiliza constantes DNS_* (p. ej. DNS_A, DNS_MX), no los tipos string que espera checkdnsrr():
<?php
$domain = "example.com";
$records = dns_get_record($domain, DNS_A);
if (!empty($records)) {
echo "DNS record exists for $domain";
echo PHP_EOL . "IP: " . $records[0]["ip"];
} else {
echo "DNS record does not exist for $domain";
}Aquí comprobamos si existe un registro A y luego leemos la dirección IPv4 resuelta del primer registro. Cada elemento del array devuelto es en sí mismo un array asociativo cuyas claves dependen del tipo de registro (ip para A, target y pri para MX, y así sucesivamente).
Tipos de registros DNS
Tanto dns_check_record() como dns_get_record() pueden comprobar varios tipos de registros DNS. El parámetro $type especifica el tipo de registro DNS que deseas comprobar. Estos son algunos de los tipos más comunes de registros DNS:
A: La dirección IPv4 del nombre de dominio.AAAA: La dirección IPv6 del nombre de dominio.MX: Los registros de intercambio de correo (servidor de correo) del nombre de dominio.NS: Los servidores de nombres autoritativos del nombre de dominio.CNAME: El nombre canónico al que apunta un alias.TXT: Registros de texto arbitrario, usados frecuentemente para SPF, DKIM y verificación de dominio.ANY: Todos los tipos de registro disponibles para el dominio.
Cuando consultas específicamente un registro MX, el helper dedicado getmxrr() (y su alias dns_get_mx()) puede rellenar la lista de hosts y prioridades en una sola llamada.
Error común: Por qué podría fallar una consulta
checkdnsrr() y dns_get_record() realizan una consulta DNS en red en tiempo real, por lo que los resultados dependen del entorno de ejecución:
- Sin red o en un host aislado (como muchos ejecutores de CI o entornos de hosting compartido) puede hacer que cada consulta devuelva
false/vacío incluso para dominios válidos. - Tiempos de espera DNS transitorios pueden causar fallos intermitentes. Para la lógica de validación, trata un único fallo con cautela en lugar de rechazar al usuario de inmediato.
- El tipo importa: un dominio puede tener registros
MXpero no un registroA(o viceversa). Siempre consulta el tipo de registro que realmente te interesa.
Como estas funciones acceden a la red, evita llamarlas en bucles ajustados; almacena en caché los resultados donde sea posible.
Conclusión
Aunque el nombre dns_check_record() fue eliminado en PHP 8.0, la funcionalidad sigue viva: usa checkdnsrr() para una comprobación boolean rápida, o dns_get_record() cuando necesites los datos del registro subyacente. Con cualquiera de las dos, puedes verificar de forma fiable registros A, AAAA, MX, NS, CNAME y TXT para cualquier dominio en PHP moderno.