W3docs

PHP dns_get_mx()-Funktion: Alles, was Sie wissen müssen

Erfahren Sie mehr über die PHP-Funktion dns_get_mx(), ihre Entfernung in PHP 8.2 und wie Sie mit dns_get_record() MX-Einträge abrufen.

Als PHP-Entwickler müssen Sie möglicherweise die Mail-Exchange-Einträge (MX) für einen Domainnamen abrufen. Die Funktion dns_get_mx() wurde historisch für diesen Zweck verwendet, wurde jedoch in PHP 8.2 entfernt. Der moderne Ansatz verwendet dns_get_record() mit dem Flag DNS_MX. In diesem Artikel behandeln wir die veraltete Funktion, ihre Entfernung und wie Sie die empfohlene Alternative verwenden.

Was ist die dns_get_mx()-Funktion?

Die Funktion dns_get_mx() war eine eingebaute PHP-Funktion, die die Mail-Exchange-Einträge (MX) für einen bestimmten Domainnamen abrief. MX-Einträge teilen anderen Mailservern mit, welche Hosts für die Annahme von E-Mails für eine Domain zuständig sind, geordnet nach Priorität. dns_get_mx() war ein Alias von getmxrr() und wurde in PHP 8.2 entfernt. Der empfohlene Ersatz ist dns_get_record($hostname, DNS_MX).

Die veraltete dns_get_mx()-Syntax

Die ursprüngliche (jetzt entfernte) Funktion war ein Alias von getmxrr() und verwendete Referenzparameter, um ihre Ergebnisse zurückzugeben:

dns_get_mx($hostname, &$mxhosts, &$weight);

Die Funktion akzeptierte drei Parameter:

  • $hostname: Der Domainname, für den Sie die MX-Einträge abrufen möchten.
  • $mxhosts: Eine Referenzvariable, die mit der Liste der MX-Hostnamen befüllt wird.
  • $weight: Eine optionale Referenzvariable, die mit der Priorität (Präferenz) jedes Hosts befüllt wird.

Da die Ergebnisse über Referenzen statt über einen Rückgabewert zurückgegeben wurden, gab die Funktion bei Erfolg nur true und bei Misserfolg false zurück. Dieses ältere Muster ist genau der Grund, warum die Funktion zugunsten des array-zurückgebenden dns_get_record() eingestellt wurde.

Wie man MX-Einträge heute abruft

Der moderne Ansatz ist dns_get_record($hostname, DNS_MX), der ein array von assoziativen arrays zurückgibt — eines pro Eintrag — und auf jeder unterstützten PHP-Version funktioniert:

php— editable, runs on the server

Hier rufen wir die MX-Einträge für gmail.com ab. dns_get_record() gibt bei Erfolg ein array von Einträgen oder bei Misserfolg false zurück. Wir durchlaufen diese mit foreach und geben den Mailserver-Host und seine Priorität aus. Beachten Sie, dass DNS-Abfragen bei ungültigen Domains hängen oder fehlschlagen können, daher sollten Sie immer den Rückgabewert prüfen und in der Produktion Timeout-Behandlung in Betracht ziehen.

Das zurückgegebene array verstehen

Jeder MX-Eintrag ist ein assoziatives array. Die am häufigsten verwendeten Schlüssel sind:

  • target: der Hostname des Mailservers, der E-Mails für die Domain empfangen soll.
  • pri: die Priorität (Präferenz) — niedrigere Zahlen werden zuerst versucht. Dies ist der Schlüssel, der den alten $weight-Referenzparameter ersetzt; beachten Sie, dass er pri heißt, nicht priority.
  • host: die Domain, zu der der Eintrag gehört.
  • type: der Eintragstyp, hier immer MX.
  • ttl: wie lange (in Sekunden) der Eintrag zwischengespeichert werden darf.

Nach Priorität sortieren

DNS garantiert nicht, dass die Einträge in Prioritätsreihenfolge zurückgegeben werden, daher sollten Sie diese selbst sortieren, bevor Sie einen Mailserver auswählen:

<?php

$records = dns_get_record("gmail.com", DNS_MX);
usort($records, fn($a, $b) => $a['pri'] <=> $b['pri']);

foreach ($records as $record) {
  echo $record['pri'] . " => " . $record['target'] . "\n";
}

Ein Mail-Client versucht zuerst den Host mit der niedrigsten Priorität und weicht nur dann auf höhere Zahlen aus, wenn dieser nicht erreichbar ist.

Verwandte Funktionen

  • dns_get_record() — der universelle Ersatz; übergeben Sie DNS_MX, DNS_A, DNS_TXT usw.
  • getmxrr() — das Referenzparameter-Äquivalent, das dns_get_mx() als Alias verwendete.
  • checkdnsrr() — prüft, ob ein Eintrag eines bestimmten Typs für einen Host existiert.

Fazit

Während dns_get_mx() einst der Standard zum Abrufen von MX-Einträgen war, wurde sie in PHP 8.2 entfernt. Verwenden Sie stattdessen dns_get_record($hostname, DNS_MX) für moderne, zuverlässige DNS-Abfragen. Wir hoffen, dass dieser Leitfaden Ihnen hilft, MX-Eintragsabfragen effektiv in Ihren PHP-Anwendungen zu implementieren.

Übungen

Übung
Was führt die Funktion dns_get_mx() in PHP aus?
Was führt die Funktion dns_get_mx() in PHP aus?
Was this page helpful?