W3docs

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 de checkdnsrr(). O nome do alias dns_check_record() foi descontinuado no PHP 7.3 e removido no PHP 8.0 — mas a própria checkdnsrr() não está descontinuada e ainda funciona em todas as versões modernas do PHP. Portanto, no PHP 8+, você tem duas opções: chamar checkdnsrr() para uma resposta simples de sim/não, ou chamar dns_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:

php— editable, runs on the server

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 MX mas nenhum registro A (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.

Prática

Prática
O que a função 'dns_check_record()' faz no PHP?
O que a função 'dns_check_record()' faz no PHP?
Was this page helpful?