Почему 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');