Função PHP dns_check_record(): Tudo o Que Você Precisa Saber
Aprenda a usar a função PHP dns_check_record() e suas alternativas modernas checkdnsrr() e dns_get_record() para verificar registros DNS.
Como desenvolvedor PHP, pode ser necessário verificar registros DNS ou checar se um registro específico existe para um domínio — por exemplo, para validar que um domínio de e-mail consegue receber mensagens antes de aceitar um cadastro. Historicamente, a função dns_check_record() era usada para essa finalidade.
Importante:
dns_check_record()era simplesmente um alias decheckdnsrr(). O nome do aliasdns_check_record()foi descontinuado no PHP 7.3 e removido no PHP 8.0 — mas a própriacheckdnsrr()não está descontinuada e ainda funciona em todas as versões modernas do PHP. Portanto, no PHP 8+, você tem duas opções: chamarcheckdnsrr()para uma resposta simples de sim/não, ou chamardns_get_record()quando também precisar dos dados do registro.
Este tutorial explica a função legada e ambas as alternativas modernas.
O que é a Função dns_check_record()?
A função dns_check_record() era uma função nativa do PHP que verificava se um tipo específico de registro DNS existia para um determinado nome de domínio. Ela retornava um valor boolean: true se ao menos um registro correspondente existisse, e false caso contrário. Como o nome dns_check_record() foi removido no PHP 8.0, chamá-la em uma instalação moderna dispara um erro fatal Call to undefined function.
Para migrar, faça uma substituição literal: dns_check_record( torna-se checkdnsrr(. Os parâmetros e o comportamento são idênticos.
Como Usar a Função dns_check_record()
Usar a função legada dns_check_record() era simples. Veja a sua sintaxe:
A sintaxe da Função PHP dns_check_record()
dns_check_record($host, $type);A função recebe dois parâmetros:
$host: O nome de domínio que você deseja verificar.$type: O tipo de registro DNS que você deseja verificar, como uma string ("A","MX","NS", …). Este parâmetro é opcional e o padrão é"MX"se não for especificado.
Opção 1: checkdnsrr() — uma verificação simples de sim/não
Se tudo que você precisa é uma resposta boolean ("este domínio possui um registro deste tipo?"), checkdnsrr() é o substituto direto. Sua assinatura é a mesma:
Opção 2: dns_get_record() — quando você precisa dos dados do registro
Se você quer os valores reais do registro (endereços IP, hostnames de servidores de e-mail, prioridades) em vez de apenas um boolean, use dns_get_record(). Ela retorna um array de registros quando encontrado, ou um array vazio em caso de falha. Note que ela usa constantes DNS_* (por exemplo, DNS_A, DNS_MX), não os tipos string que checkdnsrr() espera:
<?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";
}Aqui verificamos se um registro A existe e depois lemos o endereço IPv4 resolvido do primeiro registro. Cada elemento do array retornado é, por sua vez, um array associativo cujas chaves dependem do tipo de registro (ip para A, target e pri para MX, e assim por diante).
Tipos de Registros DNS
Tanto dns_check_record() quanto dns_get_record() podem verificar vários tipos de registros DNS. O parâmetro $type especifica o tipo de registro DNS que você deseja verificar. Aqui estão alguns dos tipos mais comuns de registros DNS:
A: O endereço IPv4 do nome de domínio.AAAA: O endereço IPv6 do nome de domínio.MX: Os registros de troca de e-mail (servidor de e-mail) para o nome de domínio.NS: Os servidores de nomes autoritativos para o nome de domínio.CNAME: O nome canônico para o qual um alias aponta.TXT: Registros de texto arbitrário, frequentemente usados para SPF, DKIM e verificação de domínio.ANY: Todos os tipos de registro disponíveis para o domínio.
Quando você consulta especificamente um registro MX, o helper dedicado getmxrr() (e seu alias dns_get_mx()) pode preencher a lista de hosts e prioridades para você em uma única chamada.
Problema Comum: Por Que uma Consulta Pode Falhar
checkdnsrr() e dns_get_record() realizam uma consulta DNS de rede ao vivo, então os resultados dependem do ambiente de execução:
- Sem rede ou em um host isolado (como muitos executores de CI ou ambientes de hospedagem compartilhada restritos) pode fazer com que toda consulta retorne
false/vazio mesmo para domínios válidos. - Timeouts DNS transitórios podem causar falhas intermitentes. Para lógica de validação, trate uma única falha com cautela em vez de rejeitar um usuário imediatamente.
- O tipo importa: um domínio pode ter registros
MXmas nenhum registroA(ou vice-versa). Sempre consulte o tipo de registro que você realmente precisa.
Como essas funções acessam a rede, evite chamá-las em loops fechados; armazene os resultados em cache sempre que possível.
Conclusão
Embora o nome dns_check_record() tenha sido removido no PHP 8.0, a funcionalidade permanece: use checkdnsrr() para uma verificação boolean rápida, ou dns_get_record() quando precisar dos dados do registro subjacente. Com qualquer uma delas, você pode verificar de forma confiável registros A, AAAA, MX, NS, CNAME e TXT para qualquer domínio no PHP moderno.