Signatur
Beschreibung
dns_get_record() führt eine DNS-Abfrage für den angegebenen Hostnamen durch und gibt die gefundenen Einträge als Array von assoziativen Arrays zurück. Über den Parameter $type kann der gewünschte Eintragstyp (z. B. DNS_A, DNS_MX, DNS_TXT) gezielt abgefragt werden. Standardmäßig werden mit DNS_ANY alle verfügbaren Typen abgerufen.
Jeder Eintrag im Rückgabe-Array enthält mindestens die Felder host, class, ttl und type. Je nach Eintragstyp kommen weitere typspezifische Felder hinzu – bei A-Records etwa ip, bei MX-Records pri und target.
Die optionalen Referenz-Parameter $authoritative_name_servers und $additional_records werden mit den autorisierenden Nameservern bzw. zusätzlichen Datensätzen aus der Antwort des DNS-Servers befüllt. Dies ist nützlich, wenn vollständige Informationen über die DNS-Hierarchie benötigt werden.
Die Funktion eignet sich ideal für die Prüfung von Domain-Konfigurationen, E-Mail-Routing-Diagnose oder die Verifikation von TXT-Records (z. B. SPF, DKIM oder Domain-Ownership-Verifikation).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Der Hostname, für den DNS-Einträge abgefragt werden sollen, z. B. "example.com". |
|
| $type | int | DNS_ANY | Bitmaske aus DNS-Typ-Konstanten wie DNS_A, DNS_AAAA, DNS_MX, DNS_TXT, DNS_NS, DNS_SOA, DNS_CNAME, DNS_ALL oder DNS_ANY. Mehrere Typen können mit | kombiniert werden. |
| $authoritative_name_servers | array | null | Wird bei Übergabe als Referenz mit den autorisierenden Nameservern der Antwort befüllt. |
| $additional_records | array | null | Wird bei Übergabe als Referenz mit zusätzlichen DNS-Einträgen aus dem Antwort-Abschnitt additional befüllt. |
| $raw | bool | false | Wenn true, werden unbekannte DNS-Typen als Roh-Daten zurückgegeben. $type wird dann als numerische DNS-Typ-ID interpretiert. |
Rückgabewert
false zurückgegeben.Beispiele
A-Records einer Domain abfragen
<?php
$records = dns_get_record('example.com', DNS_A);
if ($records === false) {
echo "Keine DNS-Einträge gefunden oder Fehler bei der Abfrage.\n";
} else {
foreach ($records as $record) {
echo "Host: {$record['host']}, IP: {$record['ip']}, TTL: {$record['ttl']}\n";
}
}
MX-Records für E-Mail-Routing prüfen
<?php
$records = dns_get_record('example.com', DNS_MX);
if (!empty($records)) {
// Nach Priorität sortieren
usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);
echo "Mailserver für example.com:\n";
foreach ($records as $mx) {
echo " Priorität {$mx['pri']}: {$mx['target']}\n";
}
} else {
echo "Keine MX-Einträge gefunden.\n";
}
TXT-Records inkl. autorisierender Nameserver auslesen
<?php
$authNS = [];
$additional = [];
$records = dns_get_record('example.com', DNS_TXT, $authNS, $additional);
echo "TXT-Einträge:\n";
foreach ($records as $record) {
echo ' ' . implode(' ', $record['entries']) . "\n";
}
echo "\nAutorisierende Nameserver:\n";
foreach ($authNS as $ns) {
echo " {$ns['target']}\n";
}
// Wichtig · Fallstricke
Betriebssystemabhängigkeit: Die Verfügbarkeit und das Verhalten von dns_get_record() hängen vom jeweiligen Betriebssystem und den installierten DNS-Bibliotheken ab. Unter Windows kann die Unterstützung für einige Eintragstypen eingeschränkt sein.
Caching: DNS-Antworten können vom lokalen Resolver oder zwischengelagerten DNS-Servern gecacht werden. Die zurückgegebenen TTL-Werte spiegeln die originalen Werte des DNS-Servers wider, nicht die verbleibende Cache-Zeit.
DNS_ANY vs. DNS_ALL: DNS_ANY fragt den DNS-Server nach beliebigen verfügbaren Einträgen (was der Server zurückgibt, ist nicht garantiert vollständig), während DNS_ALL explizit alle bekannten Typen nacheinander abfragt und damit vollständigere Ergebnisse liefert, aber mehr Netzwerkanfragen verursacht.
Sicherheit: DNS-Antworten können gefälscht sein (DNS-Spoofing). Verwende DNS-Abfragen niemals als alleinige Authentifizierungsgrundlage ohne weitere Sicherheitsmaßnahmen wie DNSSEC.