PHP dns_check_record()-Funktion: Alles, was Sie wissen müssen
Erfahren Sie, wie Sie mit der PHP-Funktion dns_check_record() DNS-Einträge prüfen und welche modernen Alternativen es gibt.
Als PHP-Entwickler müssen Sie möglicherweise DNS-Einträge überprüfen oder feststellen, ob ein bestimmter Eintrag für eine Domain existiert — zum Beispiel, um sicherzustellen, dass eine E-Mail-Domain E-Mails empfangen kann, bevor eine Registrierung akzeptiert wird. Historisch wurde dafür die Funktion dns_check_record() verwendet.
Wichtig:
dns_check_record()war lediglich ein Alias voncheckdnsrr(). Der Aliasnamedns_check_record()wurde in PHP 7.3 als veraltet markiert und in PHP 8.0 entfernt —checkdnsrr()selbst ist jedoch nicht veraltet und funktioniert in jeder modernen PHP-Version. Auf PHP 8+ gibt es daher zwei Möglichkeiten:checkdnsrr()für eine einfache Ja/Nein-Antwort aufrufen oderdns_get_record()verwenden, wenn Sie auch die Eintragsdaten benötigen.
Dieses Tutorial erläutert die Legacy-Funktion und beide modernen Alternativen.
Was ist die Funktion dns_check_record()?
Die Funktion dns_check_record() war eine in PHP integrierte Funktion, die prüfte, ob ein bestimmter Typ von DNS-Eintrag für einen gegebenen Domainnamen vorhanden ist. Sie gab einen boolean-Wert zurück: true, wenn mindestens ein passender Eintrag existierte, andernfalls false. Da der Name dns_check_record() in PHP 8.0 entfernt wurde, führt der Aufruf auf einer modernen Installation zu einem fatalen Call to undefined function-Fehler.
Für die Migration genügt ein einfaches Suchen-und-Ersetzen: dns_check_record( wird zu checkdnsrr(. Parameter und Verhalten sind identisch.
Wie verwendet man die Funktion dns_check_record()?
Die Verwendung der Legacy-Funktion dns_check_record() war unkompliziert. Hier ist ihre Syntax:
Die Syntax der PHP-Funktion dns_check_record()
dns_check_record($host, $type);Die Funktion nimmt zwei Parameter entgegen:
$host: Der Domainname, den Sie prüfen möchten.$type: Der Typ des DNS-Eintrags, den Sie prüfen möchten, als string ("A","MX","NS", …). Dieser Parameter ist optional und hat den Standardwert"MX", wenn er nicht angegeben wird.
Option 1: checkdnsrr() — eine einfache Ja/Nein-Prüfung
Wenn Sie nur eine boolean-Antwort benötigen („Hat diese Domain einen Eintrag dieses Typs?"), ist checkdnsrr() der direkte Ersatz. Die Signatur ist identisch:
Option 2: dns_get_record() — wenn Sie die Eintragsdaten benötigen
Wenn Sie die tatsächlichen Eintragswerte (IP-Adressen, Mail-Server-Hostnamen, Prioritäten) statt nur eines boolean benötigen, verwenden Sie dns_get_record(). Sie gibt ein array von Einträgen zurück, wenn Treffer gefunden werden, oder ein leeres array bei einem Fehler. Beachten Sie, dass sie DNS_*-Konstanten (z. B. DNS_A, DNS_MX) verwendet, keine string-Typen wie checkdnsrr():
<?php
$domain = "example.com";
$records = dns_get_record($domain, DNS_A);
if (!empty($records)) {
echo "DNS record exists for $domain";
echo PHP_EOL . "IP: " . $records[0]["ip"];
} else {
echo "DNS record does not exist for $domain";
}Hier prüfen wir, ob ein A-Eintrag existiert, und lesen anschließend die aufgelöste IPv4-Adresse aus dem ersten Eintrag. Jedes Element des zurückgegebenen array ist selbst ein assoziatives array, dessen Schlüssel vom Eintragstyp abhängen (ip für A, target und pri für MX usw.).
Typen von DNS-Einträgen
Sowohl dns_check_record() als auch dns_get_record() können verschiedene Typen von DNS-Einträgen prüfen. Der Parameter $type legt den Typ des zu prüfenden DNS-Eintrags fest. Hier sind einige der häufigsten DNS-Eintragstypen:
A: Die IPv4-Adresse des Domainnamens.AAAA: Die IPv6-Adresse des Domainnamens.MX: Die Mail-Exchange-Einträge (Mail-Server) für den Domainnamen.NS: Die autoritativen Nameserver für den Domainnamen.CNAME: Der kanonische Name, auf den ein Alias zeigt.TXT: Beliebige Texteinträge, häufig für SPF, DKIM und Domain-Verifizierung verwendet.ANY: Alle verfügbaren Eintragstypen für die Domain.
Wenn Sie speziell einen MX-Eintrag abfragen, kann der dedizierte Helfer getmxrr() (und sein Alias dns_get_mx()) die Host-Liste und Prioritäten in einem einzigen Aufruf befüllen.
Häufige Fallstricke: Warum eine Abfrage fehlschlagen kann
checkdnsrr() und dns_get_record() führen eine Live-Netzwerk-DNS-Abfrage durch, sodass die Ergebnisse von der Laufzeitumgebung abhängen:
- Kein Netzwerk oder ein isolierter Host (wie viele CI-Runner oder Shared-Hosting-Umgebungen) kann dazu führen, dass jede Abfrage
false/leer zurückgibt, selbst für gültige Domains. - Vorübergehende DNS-Timeouts können zu sporadischen Fehlern führen. Behandeln Sie bei Validierungslogik einen einzelnen Fehler mit Vorsicht, anstatt einen Benutzer sofort abzulehnen.
- Der Typ ist entscheidend: Eine Domain kann
MX-Einträge, aber keinenA-Eintrag haben (oder umgekehrt). Fragen Sie immer den Eintragstyp ab, der für Sie relevant ist.
Da diese Funktionen auf das Netzwerk zugreifen, sollten Sie es vermeiden, sie in engen Schleifen aufzurufen; cachen Sie Ergebnisse, wo immer möglich.
Fazit
Obwohl der Name dns_check_record() in PHP 8.0 entfernt wurde, lebt die Funktionalität weiter: Verwenden Sie checkdnsrr() für eine schnelle boolean-Prüfung oder dns_get_record(), wenn Sie die zugrundeliegenden Eintragsdaten benötigen. Mit beiden Funktionen können Sie A-, AAAA-, MX-, NS-, CNAME- und TXT-Einträge für jede Domain in modernem PHP zuverlässig prüfen.