Перейти к содержимому

Функция PHP dns_get_mx(): Всё, что нужно знать

Как разработчик PHP, вы можете столкнуться с необходимостью получить MX-записи (mail exchange) для доменного имени. Функция dns_get_mx() исторически использовалась для этих целей, но была удалена в PHP 8.2. Современный подход использует dns_get_record() с флагом DNS_MX. В этой статье мы рассмотрим устаревшую функцию, причины её удаления и то, как использовать рекомендуемую альтернативу.

Что такое функция dns_get_mx()?

Функция dns_get_mx() была встроенной функцией PHP, которая получала MX-записи для указанного доменного имени и возвращала массив, отсортированный по приоритету. Она была удалена в PHP 8.2. Рекомендуемая замена — dns_get_record($hostname, DNS_MX).

Как использовать функцию dns_get_mx()

Устаревший синтаксис выглядит так: Синтаксис dns_get_mx()

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

Функция принимает три параметра:

  • $hostname: Доменное имя, для которого нужно получить MX-записи.
  • $mxhosts: Переменная по ссылке, в которой хранятся MX-хосты для домена.
  • $weight: Переменная по ссылке, в которой хранятся веса приоритетов.

Ниже приведен пример использования современной функции dns_get_record() для получения MX-записей: Современный поиск MX-записей

php
<?php

$domain = "example.com";
$records = dns_get_record($domain, DNS_MX);

if ($records) {
  foreach ($records as $record) {
    echo "Host: " . $record['target'] . ", Priority: " . $record['priority'] . "<br/>";
  }
} else {
  echo "No MX records found for $domain";
}

В этом примере мы получаем MX-записи для домена "example.com". Функция возвращает массив записей, если они найдены, или false в противном случае. Если записи найдены, мы перебираем их с помощью foreach и выводим целевой хост и приоритет. Обратите внимание, что DNS-запросы иногда могут зависать или завершаться ошибкой для некорректных доменов; всегда проверяйте возвращаемое значение и рассмотрите возможность реализации обработки таймаутов для приложений в production.

Заключение

Хотя dns_get_mx() когда-то была стандартом для получения MX-записей, она была удалена в PHP 8.2. Вместо неё используйте dns_get_record($hostname, DNS_MX) для современных и надёжных DNS-запросов. Надеемся, это руководство поможет вам эффективно реализовать поиск MX-записей в ваших PHP-приложениях.

Практика

Какие действия выполняет функция dns_get_mx() в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.