Fonction PHP dns_get_mx() : Tout ce que vous devez savoir
Découvrez la fonction PHP dns_get_mx(), sa suppression en PHP 8.2 et comment utiliser dns_get_record() pour récupérer les enregistrements MX.
En tant que développeur PHP, vous pouvez avoir besoin d'obtenir les enregistrements mail exchange (MX) pour un nom de domaine. La fonction dns_get_mx() était historiquement utilisée à cet effet, mais elle a été supprimée dans PHP 8.2. L'approche moderne utilise dns_get_record() avec le flag DNS_MX. Dans cet article, nous aborderons la fonction héritée, sa dépréciation et comment utiliser l'alternative recommandée.
Qu'est-ce que la fonction dns_get_mx() ?
La fonction dns_get_mx() était une fonction PHP intégrée qui récupérait les enregistrements mail exchange (MX) pour un nom de domaine donné. Les enregistrements MX indiquent aux autres serveurs de messagerie quels hôtes sont responsables de l'acceptation des e-mails pour un domaine, classés par priorité. dns_get_mx() était un alias de getmxrr() et a été supprimée dans PHP 8.2. Le remplacement recommandé est dns_get_record($hostname, DNS_MX).
La syntaxe héritée de dns_get_mx()
La fonction originale (désormais supprimée) était un alias de getmxrr() et utilisait des paramètres par référence pour retourner ses résultats :
dns_get_mx($hostname, &$mxhosts, &$weight);La fonction prenait trois paramètres :
$hostname: Le nom de domaine pour lequel vous souhaitez récupérer les enregistrements MX.$mxhosts: Une variable de référence remplie avec la liste des noms d'hôtes MX.$weight: Une variable de référence optionnelle remplie avec la priorité (préférence) de chaque hôte.
Les résultats étant retournés par référence plutôt que par valeur de retour, la fonction ne renvoyait que true en cas de succès ou false en cas d'échec. C'est précisément ce schéma ancien qui a conduit à la suppression de la fonction au profit de dns_get_record(), qui retourne un array.
Comment récupérer les enregistrements MX aujourd'hui
L'approche moderne est dns_get_record($hostname, DNS_MX), qui retourne un array de tableaux associatifs — un par enregistrement — et fonctionne avec toutes les versions PHP supportées :
Ici, nous récupérons les enregistrements MX pour gmail.com. dns_get_record() retourne un array d'enregistrements en cas de succès, ou false en cas d'échec. Nous les parcourons avec foreach et affichons l'hôte du serveur de messagerie et sa priorité. Notez que les requêtes DNS peuvent se bloquer ou échouer sur des domaines invalides, alors vérifiez toujours la valeur de retour et envisagez une gestion des délais d'attente en production.
Comprendre l'array retourné
Chaque enregistrement MX est un tableau associatif. Les clés les plus fréquemment utilisées sont :
target: le nom d'hôte du serveur de messagerie qui doit recevoir les e-mails pour le domaine.pri: la priorité (préférence) — les nombres plus bas sont essayés en premier. C'est la clé qui remplace l'ancien paramètre de référence$weight; notez qu'elle s'appellepri, et nonpriority.host: le domaine auquel appartient l'enregistrement.type: le type d'enregistrement, ici toujoursMX.ttl: la durée (en secondes) pendant laquelle l'enregistrement peut être mis en cache.
Tri par priorité
DNS ne garantit pas que les enregistrements sont retournés dans l'ordre de priorité, il convient donc de les trier vous-même avant de choisir un serveur de messagerie :
<?php
$records = dns_get_record("gmail.com", DNS_MX);
usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);
foreach ($records as $record) {
echo $record['pri'] . " => " . $record['target'] . "\n";
}Un client de messagerie essaie d'abord l'hôte de priorité la plus basse et ne recourt aux numéros supérieurs que s'il est inaccessible.
Fonctions associées
dns_get_record()— le remplacement polyvalent ; passezDNS_MX,DNS_A,DNS_TXT, etc.getmxrr()— l'équivalent avec paramètre de référence dontdns_get_mx()était l'alias.checkdnsrr()— vérifie si un enregistrement d'un type donné existe pour un hôte.
Conclusion
Bien que dns_get_mx() ait été autrefois la méthode standard pour récupérer les enregistrements MX, elle a été supprimée dans PHP 8.2. Utilisez dns_get_record($hostname, DNS_MX) à la place pour des requêtes DNS modernes et fiables. Nous espérons que ce guide vous aidera à implémenter efficacement la recherche d'enregistrements MX dans vos applications PHP.