W3docs

Funzione PHP dns_get_mx(): tutto quello che devi sapere

Scopri la funzione PHP dns_get_mx(), la sua deprecazione in PHP 8.2 e come usare dns_get_record() con il flag DNS_MX come alternativa moderna.

Come sviluppatore PHP, potresti aver bisogno di ottenere i record mail exchange (MX) per un nome di dominio. La funzione dns_get_mx() veniva usata storicamente per questo scopo, ma è stata rimossa in PHP 8.2. L'approccio moderno utilizza dns_get_record() con il flag DNS_MX. In questo articolo tratteremo la funzione legacy, la sua deprecazione e come usare l'alternativa consigliata.

Cos'è la funzione dns_get_mx()?

La funzione dns_get_mx() era una funzione PHP integrata che recuperava i record mail exchange (MX) per un dato nome di dominio. I record MX indicano agli altri mail server quali host sono responsabili dell'accettazione delle email per un dominio, ordinati per priorità. dns_get_mx() era un alias di getmxrr() ed è stata rimossa in PHP 8.2. La sostituzione consigliata è dns_get_record($hostname, DNS_MX).

La sintassi legacy di dns_get_mx()

La funzione originale (ora rimossa) era un alias di getmxrr() e usava parametri per riferimento per restituire i risultati:

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

La funzione accettava tre parametri:

  • $hostname: il nome di dominio per cui si vogliono recuperare i record MX.
  • $mxhosts: una variabile per riferimento riempita con l'elenco dei nomi host MX.
  • $weight: una variabile per riferimento opzionale riempita con la priorità (preferenza) di ciascun host.

Poiché i risultati venivano restituiti tramite riferimenti anziché un valore di ritorno, la funzione restituiva solo true in caso di successo o false in caso di errore. Questo schema più vecchio è esattamente il motivo per cui la funzione è stata ritirata in favore di dns_get_record(), che restituisce un array.

Come recuperare i record MX oggi

L'approccio moderno è dns_get_record($hostname, DNS_MX), che restituisce un array di array associativi — uno per record — e funziona su ogni versione PHP supportata:

php— editable, runs on the server

Qui recuperiamo i record MX per gmail.com. dns_get_record() restituisce un array di record in caso di successo, o false in caso di errore. Li scorriamo con foreach e stampiamo l'host del mail server e la sua priorità. Tieni presente che le query DNS possono bloccarsi o fallire su domini non validi, quindi verifica sempre il valore restituito e considera la gestione dei timeout in produzione.

Comprendere l'array restituito

Ogni record MX è un array associativo. Le chiavi che utilizzerai più spesso sono:

  • target: il nome host del mail server che dovrebbe ricevere le email per il dominio.
  • pri: la priorità (preferenza) — i numeri più bassi vengono provati per primi. Questa è la chiave che sostituisce il vecchio parametro per riferimento $weight; nota che è pri, non priority.
  • host: il dominio a cui appartiene il record.
  • type: il tipo di record, qui sempre MX.
  • ttl: per quanto tempo (in secondi) il record può essere memorizzato nella cache.

Ordinare per priorità

Il DNS non garantisce che i record vengano restituiti in ordine di priorità, quindi ordinali autonomamente prima di scegliere un mail server:

<?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";
}

Un client di posta prova prima l'host con la priorità più bassa e ricorre a numeri più alti solo se non è raggiungibile.

Funzioni correlate

  • dns_get_record() — la sostituzione generica; passa DNS_MX, DNS_A, DNS_TXT, ecc.
  • getmxrr() — l'equivalente con parametri per riferimento di cui dns_get_mx() era alias.
  • checkdnsrr() — verifica se esiste un record di un dato tipo per un host.

Conclusione

Sebbene dns_get_mx() fosse un tempo lo standard per recuperare i record MX, è stata rimossa in PHP 8.2. Usa invece dns_get_record($hostname, DNS_MX) per query DNS moderne e affidabili. Speriamo che questa guida ti aiuti a implementare efficacemente le ricerche di record MX nelle tue applicazioni PHP.

Pratica

Pratica
Cosa esegue la funzione dns_get_mx() in PHP?
Cosa esegue la funzione dns_get_mx() in PHP?
Was this page helpful?