This method has no error handling, it simply puts out "false" and it is impossible to check for NXDOMAIN, SERVFAIL, TIMEOUT or any other error...(PHP 5, PHP 7, PHP 8)
dns_get_record — Lit les données DNS associées à un hôte
$hostname,$type = DNS_ANY,&$authoritative_name_servers = null,&$additional_records = null,$raw = false
   Lit les données DNS associées à l'hôte
   hostname.
  
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.comau contraire du formatwebmestre@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_serversPassé par référence, et, s'il est fourni, recevra les enregistrements de ressources pour les Authoritative Name Servers.
additional_recordsPassé 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é.
      
   dns_get_record() retourne un tableau de tableaux
   associatifs,  ou false si une erreur survient.
   Chaque tableau contient au minimum les index suivants :
   
| 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. | 
| 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 Namespour 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 parchain.ipv6: adresse pour que cet enregistrement spécifique fusionne
        avecchain.chain: l'enregistrement parent à fusionner avec les donnéesipv6. | 
| SRV | pri: (priorité) les priorités les plus basses doivent
        être utilisées en premier.weight: classement pour choisir aléatoirement parmi les
        serveurstargets.targetetport: nom d'hôte et
        port où le service est disponible.
        Pour plus d'informations, voir : » RFC 2782 | 
| NAPTR | orderetpref: équivalent àprietweightci-dessus.flags,services,regex,
        etreplacement: paramètres tels que définis
        dans la » RFC 2915. | 
| Version | Description | 
|---|---|
| 7.0.16, 7.1.2 | Ajout du support pour les enregistrements de type CAA. | 
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
        )
)
This method has no error handling, it simply puts out "false" and it is impossible to check for NXDOMAIN, SERVFAIL, TIMEOUT or any other error...Get more than one type at once like this:
<?php
$dnsr = dns_get_record('php.net', DNS_A + DNS_NS);
print_r($dnsr);
?>
Using DNS_ALL fails on some domains where DNS_ANY works. I noticed the function getting stuck on the DNS_PTR record, which caused it to return FALSE with this error:
PHP Warning:  dns_get_record(): res_nsend() failed in ....
This gets all records except DNS_PTR:
<?php
$dnsr = dns_get_record('php.net', DNS_ALL - DNS_PTR);
print_r($dnsr);
?>You might have the same problem as me, where testing a non-existent domain will search for a subdomain relative to the domain you are executing from, for example:
// Test with working domain
var_dump( dns_get_record('google.com', DNS_A) );
/* works, returns
Array
(
    [host] => google.com
    [class] => IN
    [ttl] => 299
    [type] => A
    [ip] => 172.217.12.142
)
*/
// Test with invalid domain on our website (example.com)
var_dump( dns_get_record('invalidtestingname.com', DNS_A) );
/* Doesn't work, pretend it's a subdomain
Array
(
    [host] => invalidtestingname.com.example.com
    [class] => IN
    [ttl] => 299
    [type] => A
    [ip] => xxx.xxx.xxx.xxx
)
*/
If anyone has that problem, add a "dot" at the end of the domain name, for example, instead of
dns_get_record('invalidtestingname.com', DNS_A);
Do this:
dns_get_record('invalidtestingname.com.', DNS_A);Although this works very well for general DNS queries if you want to do a direct DNS query to a specified DNS server (rather than using OS resolution) try PHPDNS: http://www.purplepixie.org/phpdns/
You can do direct (TCP or UDP) low-level queries to a nameserver and recurse at will. Very useful for testing specific servers and also for walking through a recursive resolution.Please note that Firewalls and anti malware software detects  (and depending on company policies even blocks) DNS_ANY requests. 
In that case the usage of this function fails.
This is because DNS_ANY requests can be  exploited for creating "amplification (D)DOS attackes": You send 1 DNS_ANY request and get a huge amount of information back, thus even small requests can result into hugh network load.
I advise to use a more explicit name-request instead of using DNS_ANY.When I use DNS_ALL as the second parameter to invoke dns_get_record() on the OS of Windows, PHP emits a warning with the message "Warning: dns_get_record(): Type '251721779' not supported in blah.php on line blah", and DNS_ANY is always OKAY.Sadly this method does not allow for using an arbitrary nameserver.
If you need to make a request  using a specific DNS server, you'll need to use either Pear/Net_DNS2, or libdns ( https://github.com/DaveRandom/LibDNS ).
If you want something shorter and lighter, you can also use this 150 lines function: https://gist.github.com/bohwaz/ddc61c4f7e031c3221a89981e70b830c