W3docs

Fonction PHP dns_check_record() : tout ce que vous devez savoir

Découvrez la fonction PHP dns_check_record(), dépréciée en PHP 7.3 et supprimée en PHP 8.0, et ses alternatives modernes checkdnsrr() et dns_get_record().

En tant que développeur PHP, vous pouvez avoir besoin de vérifier des enregistrements DNS ou de contrôler l'existence d'un enregistrement spécifique pour un domaine — par exemple, pour valider qu'un domaine de messagerie peut recevoir des e-mails avant d'accepter une inscription. Historiquement, la fonction dns_check_record() était utilisée à cet effet.

Important : dns_check_record() n'était qu'un alias de checkdnsrr(). L'alias dns_check_record() a été déprécié en PHP 7.3 et supprimé en PHP 8.0 — mais checkdnsrr() lui-même n'est pas déprécié et fonctionne dans toutes les versions modernes de PHP. Sous PHP 8+, deux approches s'offrent à vous : appeler checkdnsrr() pour une simple réponse oui/non, ou appeler dns_get_record() lorsque vous avez besoin des données de l'enregistrement.

Ce tutoriel explique la fonction héritée et les deux alternatives modernes.

Qu'est-ce que la fonction dns_check_record() ?

La fonction dns_check_record() était une fonction PHP intégrée qui vérifiait si un type spécifique d'enregistrement DNS existait pour un nom de domaine donné. Elle retournait une valeur boolean : true si au moins un enregistrement correspondant existait, et false dans le cas contraire. Comme le nom dns_check_record() a été supprimé en PHP 8.0, l'appeler sur une installation moderne déclenche une erreur fatale Call to undefined function.

Pour migrer, effectuez un simple chercher-remplacer : dns_check_record( devient checkdnsrr(. Les paramètres et le comportement sont identiques.

Comment utiliser la fonction dns_check_record() ?

L'utilisation de la fonction héritée dns_check_record() était simple. Voici sa syntaxe :

Syntaxe de la fonction PHP dns_check_record()

dns_check_record($host, $type);

La fonction prend deux paramètres :

  • $host : Le nom de domaine que vous souhaitez vérifier.
  • $type : Le type d'enregistrement DNS à vérifier, sous forme de string ("A", "MX", "NS", …). Ce paramètre est facultatif et vaut "MX" par défaut s'il n'est pas spécifié.

Option 1 : checkdnsrr() — une vérification simple oui/non

Si vous avez seulement besoin d'une réponse boolean (« ce domaine possède-t-il un enregistrement de ce type ? »), checkdnsrr() est le remplacement direct. Sa signature est identique :

php— editable, runs on the server

Option 2 : dns_get_record() — quand vous avez besoin des données de l'enregistrement

Si vous voulez les valeurs réelles des enregistrements (adresses IP, noms d'hôte des serveurs de messagerie, priorités) plutôt qu'un simple boolean, utilisez dns_get_record(). Elle retourne un array d'enregistrements trouvés, ou un array vide en cas d'échec. Notez qu'elle utilise des constantes DNS_* (ex. DNS_A, DNS_MX), et non les types string attendus par 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";
}

Ici, nous vérifions si un enregistrement A existe, puis nous lisons l'adresse IPv4 résolue à partir du premier enregistrement. Chaque élément du array retourné est lui-même un array associatif dont les clés dépendent du type d'enregistrement (ip pour A, target et pri pour MX, etc.).

Types d'enregistrements DNS

dns_check_record() et dns_get_record() peuvent vérifier différents types d'enregistrements DNS. Le paramètre $type spécifie le type d'enregistrement DNS à vérifier. Voici quelques-uns des types d'enregistrements DNS les plus courants :

  • A : L'adresse IPv4 du nom de domaine.
  • AAAA : L'adresse IPv6 du nom de domaine.
  • MX : Les enregistrements d'échange de messagerie (serveur de mail) pour le nom de domaine.
  • NS : Les serveurs de noms faisant autorité pour le nom de domaine.
  • CNAME : Le nom canonique vers lequel pointe un alias.
  • TXT : Des enregistrements texte arbitraires, souvent utilisés pour SPF, DKIM et la vérification de domaine.
  • ANY : Tous les types d'enregistrements disponibles pour le domaine.

Lorsque vous interrogez spécifiquement un enregistrement MX, la fonction dédiée getmxrr() (et son alias dns_get_mx()) peut renseigner la liste des hôtes et leurs priorités en un seul appel.

Piège courant : pourquoi une recherche peut échouer

checkdnsrr() et dns_get_record() effectuent une requête DNS réseau en temps réel, donc les résultats dépendent de l'environnement d'exécution :

  • Pas de réseau ou un hôte sandboxé (comme de nombreux runners CI ou environnements d'hébergement mutualisé restreints) peut faire en sorte que chaque recherche retourne false/vide même pour des domaines valides.
  • Des délais DNS transitoires peuvent provoquer des échecs intermittents. Pour la logique de validation, traitez un seul échec avec prudence plutôt que de rejeter immédiatement un utilisateur.
  • Le type est important : un domaine peut avoir des enregistrements MX mais pas d'enregistrement A (ou vice versa). Interrogez toujours le type d'enregistrement qui vous intéresse réellement.

Ces fonctions effectuant des appels réseau, évitez de les appeler dans des boucles serrées ; mettez en cache les résultats autant que possible.

Conclusion

Bien que le nom dns_check_record() ait été supprimé en PHP 8.0, la fonctionnalité perdure : utilisez checkdnsrr() pour une vérification boolean rapide, ou dns_get_record() lorsque vous avez besoin des données sous-jacentes de l'enregistrement. Avec l'une ou l'autre, vous pouvez vérifier de manière fiable les enregistrements A, AAAA, MX, NS, CNAME et TXT pour n'importe quel domaine en PHP moderne.

Pratique

Pratique
Que fait la fonction 'dns_check_record()' en PHP ?
Que fait la fonction 'dns_check_record()' en PHP ?
Was this page helpful?