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 — Liefert die zu einem Hostnamen gehörenden DNS-Einträge
$hostname,$type = DNS_ANY,&$authoritative_name_servers = null,&$additional_records = null,$raw = false
   Fragt die zum übergebenen hostname gehörenden DNS
   Resource Records ab.
  
hostname
       hostname sollte ein gültiger Hostname wie z. B.
       "www.example.com" sein. Reverse Lookups sind mit der
       in-addr.arpa-Notation möglich, jedoch sollte für
       diesen Fall gethostbyaddr() genutzt werden.
      
Hinweis:
Gemäß dem DNS-Standard werden E-Mail-Adressen in der Form
user.hostzurückgegeben (zum Beispiel:hostmaster.example.comstatthostmaster@example.com). Darum ist es wichtig, diesen Wert zu überprüfen und ihn ggf. zu ändern, bevor Sie ihn in Funktionen wie z. B. mail() verwenden.
type
       Standardmäßig sucht dns_get_record() nach jedem
       Resource Record für den hostname. Um die Anfrage
       einzuschränken, kann eine der
       DNS_*-Konstanten
       verwendet werden.
      
authoritative_name_serversWird per Referenz übergeben und wird, wenn es angegeben wurde, mit den Records für die Autoritativen Nameserver gefüllt.
additional_recordsWird per Referenz übergeben und wird, wenn es angegeben wurde, mit allen zusätzlichen Records gefüllt.
raw
       Der Parameter type wird als unverarbeitete
       DNS-Typ-ID interpretiert (die
       DNS_*-Konstanten können
       nicht verwendet werden). Der Rückgabewert enthält einen
       data-Schlüssel, der manuell geparst werden muss.
      
   Diese Funktion gibt ein Array an assioziativen Arrays zurück.
   Bei einem Fehler wird false zurückgegeben. Jedes assoziative Array enthält
   mindestens die folgenden Keys:
   
| Attribut | Bedeutung | 
|---|---|
| host | Der Host im DNS-Namensraum, auf den sich die restlichen Werte in dem assoziativen Array beziehen. | 
| class | dns_get_record() gibt nur Internet Class Records
        zurück, wodurch dieser Paramater immer INzurückgibt. | 
| type | Ein String, in dem der Record-Typ hinterlegt ist. Zusätzliche Attribute sind, abhängig vom Typ, ebenfalls in dem Array enthalten. Siehe untere Tabelle. | 
| ttl | "Time To Live", die Zeit, die für diesen Record
        noch verbleibt. Diese ist nicht identisch mit der
        ursprünglichen ttl des Records, sondern entspricht der ursprünglichen
        ttl abzüglich der Zeit, die seit der Abfrage des autoritativen
        Namensservers vergangen ist. | 
| Type | Extra Spalten | 
|---|---|
| A | ip: Eine IPv4-Addresse in dezimaler Punktnotation. | 
| MX | pri: Die Priorität des MX-Records. Niedrigere
        Zahlen bedeuten eine höhere Priorität.target: FQDN
        des MX-Records. Siehe auch: dns_get_mx(). | 
| CNAME | target: Die FQDN des Ziels, auf das dieser Alias
        zeigt. | 
| NS | target: Die FQDN des Nameservers, der der
        autorative Nameserver für dieses Zone ist. | 
| PTR | target: Die Stelle im DNS-Namensraum, auf den
        dieser Record zeigt. | 
| TXT | txt: Ein beliebiger String, der diesem Record
        zugeordnet ist. | 
| HINFO | cpu: Die IANA-Nummer für die CPU des Hosts, der
        durch diesen Record referenziert wird.os: Die
        IANA-Nummer für das Betriebssystem des Hosts, der durch diesen Record
        referenziert wird. Siehe IANAs
        »Operating System Namesfür die Bedeutung dieses Records. | 
| CAA | flags: Ein Ein-Byte-Bitfeld; zurzeit ist nur Bit 0
        definiert, was "kritisch" bedeutet; andere Bits sind reserviert und
        sollten ignoriert werden.tag: Der CAA-Tag-Name
        (alphanumerische ASCII-Zeichenkette).value: Der
        CAA-Tag-Wert (Binärstring, der Unterformate verwenden kann). Für
        weitere Information siehe
        » RFC 6844 | 
| SOA | mname: Der FQDN für den Host, von dem diese
        Resource Records kommen.rname: Die E-Mail-Adresse
        des Administrators dieser Domain.serial: Die
        aufsteigende Nummer für die Revision der angefragten Domain.refresh: Das Aktualisierungsintervall, das die
        sekundären Nameserver nutzen sollten, wenn sie ihre gespiegelten
        Kopien der Zone aktualisieren wollen.retry: Die
        Zeit, die nach einem fehlerhaften Versuch gewartet werden soll.expire: Die maximale Zeit, die ein sekundärer
        Nameserver Kopien der Zone behalten soll. Wird nach jedem
        erfolgreichen Refresh neu gezählt.minimum-ttl: Die
        Anzahl der Sekunden, die eine Anfrage im Cache behalten wird. Kann von
        individuellen Resource Records überschrieben werden. | 
| AAAA | ipv6: Die IPv6-Addresse. | 
| A6 | masklen: Die Anzahl der Bits, die von dem durchchainvorgegeben Ziel geerbt werden.ipv6: Die Adresse für diesen speziellen Record, der
        mitchainzusammengeführt werden soll.chain: Der übergeordnete Record, der mit denipv6-Daten zusammengeführt werden soll. | 
| SRV | pri: (Priorität) Die niedrigsten Prioritäten
        sollten zuerst verwendet werden.weight: Die
        Rangfolge der Gewichtung, welche der üblicherweise priorisiertentargetszufällig ausgewählt werden sollen.
        Bsp.: Ziel A: 3, Ziel B: 2. Ziel A wird im Mittel in 60% der Fälle
        gewählt.targetundport:
        Hostname und Port, unter dem der Service erreicht werden kann. Für
        weitere Information siehe:
        » RFC 2782. | 
| NAPTR | orderundpref: Gleichwertig zupriundweightoben.flags,services,regex, undreplacement:
        Parameter wie in » RFC 2915
        definiert. | 
| Version | Beschreibung | 
|---|---|
| 7.0.16, 7.1.2 | Die Unterstützung für den CAA-Record-Typ wurde hinzugefügt. | 
Beispiel #1 Benutzung von dns_get_record()
<?php
$result = dns_get_record("php.net");
print_r($result);
?>Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
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
        )
)
Beispiel #2 Benutzung von dns_get_record() und DNS_ANY
     Da man häufig auch die IP des Mailservers für einen MX-Record benötigt,
     gibt dns_get_record() auch ein Array in
     additional_records zurück, in dem die zugehörigen
     Records zu finden sind. Ebenso wird
     authoritative_name_servers mit einer Liste der
     autorativen Nameserver zurückgegeben.
    
<?php
/* Fordert alle ("ANY") Records für php.net an
   und erstellt dann die Arrays $authns und $addtl,
   die eine Liste von Servernamen enthalten, und alle
   Aufzeichnungen, die zu ihnen gehören
   */
$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);
?>Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
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