Manuel PHP
Précédent |  | Suivant

# dns_get_record

(PHP 5)

dns_get_record -- Lit les données DNS associées à un hôte

## Description

array dns_get_record ( string hostname [, int type [, array &authns, array &addtl]] )

> Note : `dns_get_record` n'est pas implémentée sur les plates-formes Windows ni sur les systèmes *BSD (actuellement). Utilisez la classe PEAR Net_DNS.

`dns_get_record` retourne un tableau associatif, contenant au minimum les index suivants :

Tableau 1. Attributs de base DNS

Attribut | Signification
--- | ---
`host` | L'enregistrement de l'espace de nom DNS qui est décrit par les autres données.
`class` | dns_get_record() ne retourne que la classe d'enregistrement Internet et, en tant que tel, cet index vaudra toujours `IN`.
`type` | Chaîne de caractère contenant le type d'enregistrement. Des attributs supplémentaires seront aussi disponibles dans le tableau suivant la valeur de ce type. Reportez-vous à la table ci-dessous.
`ttl` | Time To Live : Durée avant expiration de l'enregistrement. Cette valeur est différente de la durée avant expiration originale, mais plutôt cette valeur moins la durée depuis la dernière interrogation du serveur DNS responsable.

`hostname` doit être un nom d'hôte DNS valide, comme `www.example.com`. Des résolutions inversées peuvent être faites avec la notation in-addr.arpa, mais la fonction gethostbyaddr() est plus efficace pour faire des résolutions inverses.

Par défaut, dns_get_record() va rechercher toutes les ressources associées à `hostname`. Pour limiter la taille de la requête, le paramètre optionnel `type` peut prendre l'une des valeurs constantes suivantes : `DNS_A`, `DNS_CNAME`, `DNS_HINFO`, `DNS_MX`, `DNS_NS`, `DNS_PTR`, `DNS_SOA`, `DNS_TXT`, `DNS_AAAA`, `DNS_SRV`, `DNS_NAPTR`, `DNS_A6`, `DNS_ALL` ou `DNS_ANY`. Par défaut, il vaut DNS_ANY.

> Note : À cause des performances excentriques de la bibliothèque libresolv, suivant les plates-formes, `DNS_ANY` ne retournera pas toujours tous les enregistrements, et l'option `DNS_ALL`, bien que plus lente, le fera de manière plus sûre.

Les paramètres optionnels `authns` et `addtl` sont passés par référence et, si fournis, ils recevront les enregistrements de ressources pour les Authoritative Name Servers, et tous les Additional Records respectivement. Voir l'exemple ci-dessous.

Tableau 2. Autres index disponibles suivant le type DNS

Type | Valeur supplémentaire
--- | ---
`A` | `ip` : une adresse IP v4, au format numérique.
`MX` | `pri` : priorité du serveur de mail. Les nombres faibles indiquent une priorité importante. `target` : FQDN du serveur de mail. Voir aussi dns_get_mx().
`CNAME` | `target` : FQDN du nom de l'espace DNS qui sert d'alias à cet enregistrement.
`NS` | `target` : FQDN du nom de serveur qui est responsable de ce nom de domaine.
`PTR` | `target` : nom de domaine vers lequel cet enregistrement pointe.
`TXT` | `txt` : chaîne de caractères arbitrairement associée à cet enregistrement.
`HINFO` | `cpu` : numéro IANA désignant le processeur de la machine référencée par cet enregistrement. `os` : numéro IANA désignant le système d'exploitation de la machine référencée par cet enregistrement. Voir Operating System Names pour connaître la signification de ces valeurs.

`SOA`

`mname` : FQDN de la source de cet enregistrement. `rname` : adresse email du contact administratif de ce domaine. `serial` : numéro de série du nom de domaine. `refresh` : intervalle de rafraîchissement (en secondes) que les serveurs de noms secondaires doivent utiliser pour mettre en cache ce nom de domaine. `retry` : durée (en secondes) d'attente après un rafraîchissement échoué, avant de faire une seconde tentative. `expire` : durée maximale (en secondes) de conservation d'une copie des données de zone sans pouvoir faire de rafraichissement. `minimum-ttl` : durée minimale (en secondes) pendant laquelle un client conserve des données de zone avant qu'il ne soumette une nouvelle requête. Cette configuration peut être annulée par d'autres enregistrements.

`AAAA` | `ipv6` : adresse IPv6
`A6`(PHP >= 5.1.0) | `masklen` : longueur (en octets) à hériter depuis la cible spécifiée par `chain`. `ipv6` : adresse pour que cet enregistrement spécifique fusionne avec `chain`. `chain` : l'enregistrement parent à fusionner avec les données `ipv6`.
`SRV` | `pri` : (priorité) les priorités les plus basses doivent être utilisées en premier. `weight` : classement pour choisir aléatoirement parmi les serveurs `targets`. `target` et `port` : nom d'hôte et port où le service est disponible. Pour plus d'informations, voir : RFC 2782
`NAPTR` | `order` et `pref` : équivalent à `pri` et `weight` ci-dessus. `flags`, `services`, `regex`, et `replacement` : paramètres tels que définis dans la RFC 2915.

> Note : En terme de standards DNS, les adresses email sont données au format utilisateur.hote (par exemple : webmestre.example.com au contraire du format webmestre@example.com). N'oubliez pas de vérifier cette adresse et de la modifier si nécessaire avant de la passer à la fonction mail().

Exemple 1. Exemple avec dns_get_record()

`<?php $result = dns_get_record("php.net"); print_r($result); ?>`

L'exemple ci-dessus va afficher :

    Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => MX
                [pri] => 5
                [target] => pair2.php.net
                [class] => IN
                [ttl] => 6765
            )

        [1] => Array
            (
                [host] => php.net
                [type] => A
                [ip] => 64.246.30.37
                [class] => IN
                [ttl] => 8125
            )

    )
    */

Comme il est très courant de rechercher l'IP d'un serveur, une fois que le champ MX a été résolu, dns_get_record() retournera aussi un tableau dans le paramètre `addtl` qui contiendra les enregistrements associés. `authns` est aussi retourné en contenant une liste des serveurs autorité.

Exemple 2. Exemple avec dns_get_record() et DNS_ANY

`<?php /* Demande tous ("ANY") les enregistrements pour php.net, puis crée les tableaus $authns et $addtl contenant une liste des noms de serveurs, et tous les enregistrements qui vont avec */ $result = dns_get_record("php.net",DNS_ANY,$authns,$addtl); echo 'Résultat = '; print_r($result); echo 'Authorité NS = '; print_r($authns); echo 'Additionnel = '; print_r($addtl); ?>`

L'exemple ci-dessus va afficher :

    Résultat = Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => MX
                [pri] => 5
                [target] => pair2.php.net
                [class] => IN
                [ttl] => 6765
            )

        [1] => Array
            (
                [host] => php.net
                [type] => A
                [ip] => 64.246.30.37
                [class] => IN
                [ttl] => 8125
            )

    )
    Authortité NS = Array
    (
        [0] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => remote1.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [1] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => remote2.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [2] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => ns1.easydns.com
                [class] => IN
                [ttl] => 10722
            )

        [3] => Array
            (
                [host] => php.net
                [type] => NS
                [target] => ns2.easydns.com
                [class] => IN
                [ttl] => 10722
            )

    )
    Additionnel = Array
    (
        [0] => Array
            (
                [host] => pair2.php.net
                [type] => A
                [ip] => 216.92.131.5
                [class] => IN
                [ttl] => 6766
            )

        [1] => Array
            (
                [host] => remote1.easydns.com
                [type] => A
                [ip] => 64.39.29.212
                [class] => IN
                [ttl] => 100384
            )

        [2] => Array
            (
                [host] => remote2.easydns.com
                [type] => A
                [ip] => 212.100.224.80
                [class] => IN
                [ttl] => 81241
            )

        [3] => Array
            (
                [host] => ns1.easydns.com
                [type] => A
                [ip] => 216.220.40.243
                [class] => IN
                [ttl] => 81241
            )

        [4] => Array
            (
                [host] => ns2.easydns.com
                [type] => A
                [ip] => 216.220.40.244
                [class] => IN
                [ttl] => 81241
            )

    )
    */

Voir aussi dns_get_mx() et dns_check_record().

Précédent | Sommaire | Suivant
dns_get_mx | Niveau supérieur | fsockopen