dns_get_mx, dns_get_record и checkdnsrr не работают с MX (хотя работают с A) - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь проверить, существует ли запись MX для данного домена, и ничего не работает.

// prepare the hostname
$hostname = 'gmail.com';
$hostname = idn_to_ascii($hostname);//php.net/manual/function.checkdnsrr.php#113537
$hostname = sprintf('%s.', $hostname);//php.net/manual/function.checkdnsrr.php#119969
// perform the checks
dns_get_mx($hostname, $dns_get_mx); // a.k.a. getmxrr()
$dns_get_record = dns_get_record($hostname, DNS_MX);
$checkdnsrr = checkdnsrr($hostname, 'MX');
// output the result
var_dump(array(
    'hostname' => $hostname,
    'dns_get_mx' => $dns_get_mx,
    'dns_get_record' => $dns_get_record,
    'checkdnsrr' => $checkdnsrr,
));

Вот что я получаю (для обоих gmail.com. и gmail.com, пробовал отдельно):

Warning: dns_get_record(): A temporary server error occurred. in /var/www/html/example.php
array (size=4)
  'hostname' => string 'gmail.com.' (length=10)
  'dns_get_mx' => 
    array (size=0)
      empty
  'dns_get_record' => boolean false
  'checkdnsrr' => boolean false

Если я заменил MX на A, dns_get_record() вернет правильный IP-адрес, и checkdnsrr() возвращает true.

В логах ничего нет (кроме вышеуказанного предупреждения), и поиск в Google не помог. Как мне отладить это?

UPD Проблема возникает в моей локальной среде VirtualBox (PHP 5.6.39); все на самом деле работает на рабочем сервере (PHP 7.3.11)

1 Ответ

0 голосов
/ 19 февраля 2020

VirtualBox, кажется, перезаписывает /etc/resolv.conf, и это портит DNS на гостевой машине.

Мое исправление на данный момент:

echo "nameserver 1.1.1.1" > /etc/resolv.conf

Подробнее

...