Signatur
Beschreibung
dns_check_record() ist ein Alias der Funktion checkdnsrr() und prüft, ob im DNS für den angegebenen Hostnamen (oder eine IP-Adresse) mindestens ein Eintrag des gewünschten Typs vorhanden ist. Die Funktion gibt true zurück, wenn ein entsprechender Eintrag gefunden wurde, andernfalls false.
Typische Anwendungsfälle sind die Validierung von E-Mail-Domains (Prüfung auf MX-Einträge), die Überprüfung ob ein Hostname auflösbar ist (A- oder AAAA-Eintrag), oder die Feststellung ob ein Domain-Name überhaupt im DNS registriert ist. Sie ist besonders nützlich, bevor eine E-Mail versendet wird oder eine Benutzereingabe als Domain akzeptiert werden soll.
Unterstützte Record-Typen sind: A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR, TXT sowie ANY. Bei Angabe von ANY wird geprüft, ob irgendein DNS-Eintrag für den Hostnamen existiert.
Da es sich um einen Alias handelt, verhält sich die Funktion identisch zu checkdnsrr(). Beide Funktionen sind auf Unix-ähnlichen Systemen verfügbar; unter Windows steht sie erst ab PHP 5.3.0 mit den Win32-DNS-Funktionen zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Der zu prüfende Hostname oder die IP-Adresse (für PTR-Abfragen). Zum Beispiel example.com oder 192.0.2.1. |
|
| $type | string | MX | Der DNS-Eintragstyp als Zeichenkette. Gültige Werte: A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR, TXT, ANY. Standard ist MX. |
Rückgabewert
true zurück, wenn mindestens ein DNS-Eintrag des angegebenen Typs für den Hostnamen gefunden wurde, andernfalls false. Gibt ebenfalls false zurück, wenn der Hostname ungültig ist oder ein DNS-Fehler auftritt.Beispiele
MX-Eintrag einer E-Mail-Domain prüfen
<?php
$domain = 'gmail.com';
if (dns_check_record($domain, 'MX')) {
echo "Die Domain '{$domain}' besitzt MX-Einträge – E-Mail-Versand möglich.\n";
} else {
echo "Keine MX-Einträge für '{$domain}' gefunden.\n";
}
E-Mail-Adresse vor dem Versand validieren
<?php
function isValidEmailDomain(string $email): bool {
$parts = explode('@', $email, 2);
if (count($parts) !== 2) {
return false;
}
$domain = $parts[1];
// Prüfe MX-Eintrag, falle auf A-Eintrag zurück
return dns_check_record($domain, 'MX') || dns_check_record($domain, 'A');
}
$emails = [
'user@example.com',
'user@this-domain-does-not-exist-xyz123.invalid',
];
foreach ($emails as $email) {
$valid = isValidEmailDomain($email) ? 'gültig' : 'ungültig';
echo "{$email}: Domain {$valid}\n";
}
Verschiedene DNS-Record-Typen prüfen
<?php
$hostname = 'php.net';
$types = ['A', 'AAAA', 'MX', 'NS', 'TXT'];
foreach ($types as $type) {
$exists = dns_check_record($hostname, $type) ? 'vorhanden' : 'nicht vorhanden';
echo "{$type}-Eintrag für {$hostname}: {$exists}\n";
}
// Wichtig · Fallstricke
Alias: dns_check_record() ist ein vollständiger Alias von checkdnsrr(). Es gibt keinen funktionalen Unterschied zwischen beiden Funktionen. In neuem Code wird empfohlen, einheitlich eine der beiden Varianten zu verwenden.
Windows: Unter Windows war diese Funktion vor PHP 5.3.0 nicht verfügbar. Ab PHP 5.3.0 wird sie über die Windows-DNS-API unterstützt, wobei nicht alle Record-Typen auf allen Plattformen gleich behandelt werden.
Sicherheit: Die Funktion sollte nicht als alleinige Validierungsmethode für E-Mail-Adressen verwendet werden, da ein vorhandener MX-Eintrag nicht garantiert, dass die Adresse existiert oder E-Mails empfangen kann. Für eine robuste Validierung sollten zusätzliche Prüfungen (Format-Validierung, ggf. SMTP-Probe) durchgeführt werden.
Caching: DNS-Abfragen werden unter PHP nicht automatisch gecacht. Bei häufigen Aufrufen für dieselbe Domain kann dies zu Latenzen führen. Der Einsatz eines externen Caches (z. B. APCu) ist empfehlenswert.