Start · Sprachen · PHP · Referenz · dns_check_record

dns_check_record

Funktion

Prüft, ob für einen Hostnamen DNS-Einträge des angegebenen Typs existieren. Alias von <code>checkdnsrr()</code>.

seit PHP 5.0.0 Kategorie: http

Signatur

dns_check_record(string $hostname, string $type = 'MX'): bool

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

Typ
bool
Beschreibung
Gibt 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";
}
Die Domain 'gmail.com' besitzt MX-Einträge – E-Mail-Versand möglich.

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";
}
user@example.com: Domain gültig user@this-domain-does-not-exist-xyz123.invalid: Domain ungültig

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";
}
A-Eintrag für php.net: vorhanden AAAA-Eintrag für php.net: vorhanden MX-Eintrag für php.net: vorhanden NS-Eintrag für php.net: vorhanden TXT-Eintrag für php.net: vorhanden

// 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.