Position actuelle: Accueil> Derniers articles> Quelles sont les usages de base de la fonction DNS_GET_RECORD? Comment utiliser efficacement dns_get_record en php?

Quelles sont les usages de base de la fonction DNS_GET_RECORD? Comment utiliser efficacement dns_get_record en php?

gitbox 2025-06-27

Dans PHP, la fonction dns_get_record () est un outil très pratique pour obtenir des informations d'enregistrement DNS pour un nom de domaine spécifié. Cette fonction offre aux développeurs la possibilité d'interroger des enregistrements directement à partir du serveur DNS et est largement utilisé dans le diagnostic du réseau, le développement du système de messagerie, la plate-forme d'outil de nom de domaine et d'autres scénarios.

1. Utilisation de base de DNS_GET_RECORD

Le prototype de fonction de dns_get_record () est le suivant:

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$type</span></span><span> = DNS_ANY [, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$authns</span></span><span> [, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$addtl</span></span><span> ]]] )
</span></span>
  • $ hostname : le nom d'hôte à requête (par exemple: example.com ).

  • $ Type : Le type d'enregistrement DNS pour la requête. Les types couramment utilisés comprennent:

    • DNS_A : adresse IPv4

    • DNS_AAAA : Adresse IPv6

    • DNS_MX : enregistrement d'échange de courrier

    • DNS_CNAME : Record d'alias

    • DNS_TXT : enregistrement de texte

    • DNS_NS : serveur de noms de domaine

    • DNS_SOA : Record de l'agence d'autorisation de démarrage

    • DNS_ANY : Tous types de dossiers

  • $ Authns (Facultatif): Renvoie les informations de serveur de noms faisant autorité.

  • $ addtl (facultatif): renvoie des enregistrements supplémentaires.

Exemple 1: interroger un enregistrement

 <span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_A);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$records</span></span><span>);
</span></span>

Ce code renverra un tableau contenant tous les enregistrements, chaque élément est un tableau associatif contenant des champs tels que l'hôte , le type , l'IP , le TTL , etc.

Exemple 2: Requête MX Records

 <span><span><span class="hljs-variable">$mxRecords</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_MX);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$mxRecords</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$record</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Mail Server: <span class="hljs-subst">{$record['target']}</span></span></span><span>, Priority: </span><span><span class="hljs-subst">{$record['pri']}</span></span><span>\n";
}
</span></span>

2. Conseils pour une utilisation efficace de dns_get_record

Pour utiliser cette fonction plus efficacement, il existe plusieurs conseils et suggestions pratiques:

1. Définissez le type d'enregistrement

Évitez d'utiliser DNS_ANY car cela demandera tous les types d'enregistrements à la fois, ce qui peut entraîner des surcharges de performances supplémentaires. Dans une utilisation réelle, seul le type d'enregistrement requis doit être interrogé.

2. Utilisez du cache pour réduire les requêtes en double

dns_get_record () ne cache pas les résultats, et une requête DNS réelle est exécutée chaque fois que l'appel est appelé. Si vous devez interroger à plusieurs reprises le même nom de domaine pendant un cycle de vie d'application, il est recommandé de l'utiliser en conjonction avec un mécanisme de mise en cache (comme APCU ou Memcached):

 <span><span><span class="hljs-variable">$cacheKey</span></span><span> = </span><span><span class="hljs-string">'dns_a_example_com'</span></span><span>;
</span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">apcu_fetch</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_A);
    </span><span><span class="hljs-title function_ invoke__">apcu_store</span></span><span>(</span><span><span class="hljs-variable">$cacheKey</span></span><span>, </span><span><span class="hljs-variable">$records</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>); </span><span><span class="hljs-comment">// cache5minute</span></span><span>
}
</span></span>

3. Gestion des erreurs et vérification des résultats

FALSE sera renvoyé lorsque la requête DNS_GET_RECORD () échoue, de sorte que les vérifications de valeur de retour doivent toujours être effectuées dans des environnements de production:

 <span><span><span class="hljs-variable">$records</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dns_get_record</span></span><span>(</span><span><span class="hljs-string">"example.com"</span></span><span>, DNS_MX);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"DNS La requête a échoué"</span></span><span>);
    </span><span><span class="hljs-comment">// Vous pouvez effectuer un mécanisme de secours ou des invites utilisateur en fonction de vos besoins</span></span><span>
}
</span></span>

4. Analyser différents types de champs

Différents types de champs d'enregistrement DNS sont légèrement différents. Par exemple, il y a un champ IP dans l'enregistrement A , tandis qu'il y a PRI et Target dans l'enregistrement MX . Lors du traitement de ces données, vous devez prêter attention aux différences structurelles:

 <span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$records</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$record</span></span><span>) {
    </span><span><span class="hljs-keyword">switch</span></span><span> (</span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'type'</span></span><span>]) {
        </span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'A'</span></span><span>:
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IP: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'ip'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
            </span><span><span class="hljs-keyword">break</span></span><span>;
        </span><span><span class="hljs-keyword">case</span></span><span> </span><span><span class="hljs-string">'MX'</span></span><span>:
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"MX: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'target'</span></span><span>] . </span><span><span class="hljs-string">" (Priority: "</span></span><span> . </span><span><span class="hljs-variable">$record</span></span><span>[</span><span><span class="hljs-string">'pri'</span></span><span>] . </span><span><span class="hljs-string">")\n"</span></span><span>;
            </span><span><span class="hljs-keyword">break</span></span><span>;
    }
}
</span></span>

3. Résumé

La fonction DNS_GET_RECORD () de PHP fournit un moyen d'accéder directement aux enregistrements de résolution de noms de domaine, qui est très adapté aux scénarios où des requêtes DNS dynamiques sont nécessaires. En définissant rationnellement le type de requête, en ajoutant un mécanisme de cache et en structurant la valeur de retour de résolution, cette fonction peut être utilisée plus efficacement et en toute sécurité dans les applications réelles. Lors du développement de fonctions liées à DNS, dns_get_record () est un outil indispensable.