php dns_get_records(host, type) возвращает false с type=DNS_ALL, но возвращает записи DNS с DNS_TXT или DNS_A
Что исследуя неисправность в плагине WordPress, я заметил, что
$records = @dns_get_record( $host, DNS_ALL );
возвращает пустой массив.
$records = @dns_get_record( $host, DNS_A + DNS_TXT );
возвращает массив, который мне нужен.
Тем не менее, я до сих пор не понимаю, почему это произошло, и я хочу убедиться, что никому больше не придется тратить несколько часов на отладку из-за этой проблемы.
Вещи, которые я пробовал до сих пор:
- Я удалил знак @, чтобы разрешить ошибки и предупреждения, однако я не обнаружил ни сообщений об ошибках, ни исключений.
- Я попробовал DNS_ANY (по умолчанию), и это не привело к созданию массива записей.
- Проблема, похоже, на сервере, на котором размещено приложение. Например, при запуске dns_get_record("google.com") я получаю массив с 19 записями.
Любая идея, почему это произошло или где искать потенциальные ошибки?
Предложения из комментариев:
- @AbraCadaver говорит, что DNS_ALL инициирует передачу зоны, которая обычно ограничивается только между первичным и вторичным серверами и т. д.
- @ patrick-mevzek: указал на документацию, в которой говорится, что libresolv не может быть реализован между платформами и что DNS_ALL медленнее, чем DNS_ANY, но более надежен.
- @MarkusZeller подозревает некоторые ограничения со стороны провайдера веб-хостинга.
- Брандмауэр может ограничивать TCP или UDP на порту 53.
- Хост блокирует DNS_ANY и DNS_ALL.
Ссылки по теме:
- https://bugs.php.net/bug.php?id=79561 отчет об ошибке за май 2022 г.
- пул-реквест для php7.3 https://github.com/php/php-src/pull/5524 от 2020 г.
- https://www.php.net/manual/en/function.dns-get-record.php комментарий одного пользователя о том, что DNS_ALL у него не работает
- Почему PHP-функция dns_get_record() возвращает пустой массив?
- Проверка записи MX с помощью getmxrr() или dns_get_record() возвращает неверную информацию.
- PHP dns_get_record отсутствуют записи для субдоменов