# dns_get_record

(PHP 5, PHP 7, PHP 8)

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

### Description

dns_get_record(
string `$hostname`,
int `$type` = `DNS_ANY`,
array `&$authoritative_name_servers` = `null`,
array `&$additional_records` = `null`,
bool `$raw` = `false`
): array|false

Lit les données DNS associées à l'hôte `hostname`.

### Liste de paramètres

`hostname`

  `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.

  > 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().

`type`

  Par défaut, dns_get_record() va rechercher toutes les ressources associées à `hostname`. Pour limiter la requête, utilisez l'une des constantes `DNS_*`.

`authoritative_name_servers`

  Passé par référence, et, s'il est fourni, recevra les enregistrements de ressources pour les Authoritative Name Servers.

`additional_records`

  Passé par référence, et, s'il est fourni, recevra tous les enregistrements supplémentaires.

`raw`

  Le `type` sera interprété comme un ID de type DNS brut (les constantes `DNS_*` ne peuvent pas être utilisées). La valeur de retour contiendra une clé `data`, qui doit être manuellement analysé.

### Valeurs de retour

dns_get_record() retourne un tableau de tableaux associatifs, ou `false` si une erreur survient. Chaque tableau contient au minimum les index suivants :

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ères 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.

Autres index disponibles suivant le type DNS
Type | Valeur supplémentaire
--- | ---
`A` | `ip`: une adresse IPv4, 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.
`CAA` | `flags` : Un champ-bit d'un octet : actuellement seul le bit 0 est définit, signifiant 'critical' (critique) ; les autres bits sont réservés et devrait être ignoré. `tag`: Le nom du tag CAA (chaîne alphanumérique ASCII). `value` : La valeur du tag CAA (chaîne binaire, peut utiliser des sous-formats). Pour plus d'informations voir : » RFC 6844
`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 rafraîchissement. `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` | `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.

### Historique

Version | Description
--- | ---
7.0.16, 7.1.2 | Ajout du support pour les enregistrements de type CAA.

### Exemples

Exemple #1 Exemple avec dns_get_record()

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

Résultat de l'exemple ci-dessus est similaire à :

    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
            )

    )

Exemple #2 Exemple avec dns_get_record() et DNS_ANY

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 `additional_records` qui contiendra les enregistrements associés. `authoritative_name_servers` est aussi retourné en contenant une liste des serveurs autorité.

`<?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 "Result = ";
print_r($result);
echo "Auth NS = ";
print_r($authns);
echo "Additional = ";
print_r($addtl);
?>`

Résultat de l'exemple ci-dessus est similaire à :

    Result = 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
            )

    )
    Auth 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
            )

    )
    Additional = 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() - Alias de getmxrr
- dns_check_record() - Alias de checkdnsrr