Почему PHP-функция dns_get_record() возвращает пустой массив?

У меня был скрипт на одном из моих сайтов, который загружал записи DNS, используя dns_get_record() PHP функция Но примерно через 2 недели эта функция возвращает пустой массив. Я написал тестовый скрипт, как показано ниже:

<?php
$result = dns_get_record("php.net");
if (count($result)) {
    print_r($result);
} else {
    echo 'Empty Array';
}
?>

Он хорошо работает на моей локальной машине, но когда я тестирую его на своем сервере, он возвращает пустой массив как результат.
В чем дело, друзья?

2 ответа

Убедитесь, что DNS-порты открыты на сервере, для этого требуется порт TCP/UDP 53.

Вы можете проверить, что ваш сервер может делать исходящие DNS-запросы, набрав следующее

dig exmaple.com и посмотреть, если вы получите ожидаемый ответ.

Убедитесь, что на сервере установлены DNS-серверы, а затем проверьте брандмауэр, как было предложено ранее.

Наконец, стоит проверить версии PHP на каждой машине?

Клиенты нуждаются в dns и dhcp или жестко запрограммированном заполнении бланков.

Серверы часто не видят ничего, только отвечая на их IP-трафик

Была аналогичная проблема, когда проект работал внутри контейнера докеров.

Чтобы исправить это, мы использовали Net_DNS2 вместо родногоdns_get_record, с прямым указанием того, какой DNS-сервер следует использовать.

$dnsResolver = new Net_DNS2_Resolver([
    'nameservers' => ['8.8.8.8']
]);
$dnsResolver->query('php.net', 'NS');
Другие вопросы по тегам