W3docs

Funzione PHP dns_check_record(): Tutto Quello che Devi Sapere

Scopri come verificare record DNS in PHP con dns_check_record(), checkdnsrr() e dns_get_record(), incluse le alternative moderne per PHP 8+.

Come sviluppatore PHP, potresti aver bisogno di verificare i record DNS o controllare se un record specifico esiste per un dominio — ad esempio, per convalidare che un dominio email possa ricevere messaggi prima di accettare una registrazione. Storicamente, la funzione dns_check_record() veniva utilizzata a questo scopo.

Importante: dns_check_record() era semplicemente un alias di checkdnsrr(). Il nome alias dns_check_record() è stato deprecato in PHP 7.3 e rimosso in PHP 8.0 — ma checkdnsrr() in sé non è deprecato e funziona ancora in ogni versione moderna di PHP. Quindi su PHP 8+ hai due strade: chiama checkdnsrr() per una semplice risposta sì/no, oppure chiama dns_get_record() quando hai bisogno anche dei dati del record.

Questo tutorial spiega la funzione legacy e le due alternative moderne.

Cos'è la Funzione dns_check_record()?

La funzione dns_check_record() era una funzione built-in di PHP che verificava se un tipo specifico di record DNS esisteva per un determinato nome di dominio. Restituiva un valore boolean: true se esisteva almeno un record corrispondente, false altrimenti. Poiché il nome dns_check_record() è stato rimosso in PHP 8.0, chiamarla su un'installazione moderna genera un errore fatale Call to undefined function.

Per migrare, effettua una sostituzione letterale: dns_check_record( diventa checkdnsrr(. I parametri e il comportamento sono identici.

Come Usare la Funzione dns_check_record()

L'uso della funzione legacy dns_check_record() era semplice. Ecco la sua sintassi:

La sintassi della funzione PHP dns_check_record()

dns_check_record($host, $type);

La funzione accetta due parametri:

  • $host: Il nome di dominio che vuoi controllare.
  • $type: Il tipo di record DNS che vuoi controllare, come string ("A", "MX", "NS", …). Questo parametro è opzionale e il valore predefinito è "MX" se non specificato.

Opzione 1: checkdnsrr() — un semplice controllo sì/no

Se tutto ciò di cui hai bisogno è una risposta boolean ("questo dominio ha un record di questo tipo?"), checkdnsrr() è il sostituto diretto. La sua firma è la stessa:

php— editable, runs on the server

Opzione 2: dns_get_record() — quando hai bisogno dei dati del record

Se vuoi i valori effettivi dei record (indirizzi IP, nomi host dei mail server, priorità) anziché solo un boolean, usa dns_get_record(). Restituisce un array di record se trovati, oppure un array vuoto in caso di errore. Nota che usa le costanti DNS_* (es. DNS_A, DNS_MX), non i tipi string che checkdnsrr() si aspetta:

<?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";
}

Qui verifichiamo se esiste un record A e poi leggiamo l'indirizzo IPv4 risolto dal primo record. Ogni elemento dell'array restituito è a sua volta un array associativo le cui chiavi dipendono dal tipo di record (ip per A, target e pri per MX, e così via).

Tipi di Record DNS

Sia dns_check_record() che dns_get_record() possono controllare vari tipi di record DNS. Il parametro $type specifica il tipo di record DNS che vuoi controllare. Ecco alcuni dei tipi di record DNS più comuni:

  • A: L'indirizzo IPv4 del nome di dominio.
  • AAAA: L'indirizzo IPv6 del nome di dominio.
  • MX: I record di scambio mail (mail server) per il nome di dominio.
  • NS: I name server autorevoli per il nome di dominio.
  • CNAME: Il nome canonico a cui punta un alias.
  • TXT: Record di testo arbitrari, spesso usati per SPF, DKIM e la verifica del dominio.
  • ANY: Ogni tipo di record disponibile per il dominio.

Quando si interroga specificamente un record MX, l'helper dedicato getmxrr() (e il suo alias dns_get_mx()) può popolare l'elenco degli host e le priorità in una sola chiamata.

Problemi Comuni: Perché una Ricerca Potrebbe Fallire

checkdnsrr() e dns_get_record() eseguono una query DNS di rete in tempo reale, quindi i risultati dipendono dall'ambiente di runtime:

  • Nessuna rete o un host in sandbox (come molti runner CI o jail di hosting condiviso) può far restituire false/vuoto a ogni ricerca anche per domini validi.
  • Timeout DNS transitori possono causare errori intermittenti. Per la logica di validazione, tratta un singolo errore con cautela anziché rifiutare immediatamente un utente.
  • Il tipo è importante: un dominio potrebbe avere record MX ma nessun record A (o viceversa). Interroga sempre il tipo di record che ti interessa effettivamente.

Poiché queste funzioni accedono alla rete, evita di chiamarle in cicli stretti; memorizza nella cache i risultati quando puoi.

Conclusione

Sebbene il nome dns_check_record() sia stato rimosso in PHP 8.0, la funzionalità è ancora disponibile: usa checkdnsrr() per un rapido controllo boolean, oppure dns_get_record() quando hai bisogno dei dati del record sottostante. Con entrambe, puoi verificare in modo affidabile i record A, AAAA, MX, NS, CNAME e TXT per qualsiasi dominio in PHP moderno.

Pratica

Pratica
Cosa fa la funzione 'dns_check_record()' in PHP?
Cosa fa la funzione 'dns_check_record()' in PHP?
Was this page helpful?