【问题标题】:Why does dns_get_record() PHP function returns empty array?为什么 dns_get_record() PHP 函数返回空数组?
【发布时间】:2015-06-08 14:10:53
【问题描述】:

我的一个网站中有一个脚本,它使用dns_get_record() PHP 函数获取 DNS 记录。但是这个函数返回一个空数组大约是 2 周。我写了一个如下的测试脚本:

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

它在我的本地机器上运行良好,但是当我在我的服务器上测试它时,它返回 Empty Array 作为结果。
怎么啦?

【问题讨论】:

  • $result 更有可能是 false,而不是表明它失败的空数组。
  • 您的服务器是 DNS 盲,而客户端不是
  • @AsConfused 你能给我一个解决方案吗?我以前没有这样的问题
  • 打印 $result 。你有阵列吗?
  • 在同一台服务器上?描述服务器操作系统

标签: php arrays dns-get-record


【解决方案1】:

检查服务器上的 DNS 端口是否打开,它需要 TCP/UDP 端口 53。

您可以通过键入以下内容来检查您的服务器是否可以进行出站 DNS 查询

dig exmaple.com 看看你是否得到了预期的响应。

检查服务器是否设置了 DNS 服务器,然后按照之前的建议检查防火墙。

最后,值得检查每台机器上的 PHP 版本吗?

【讨论】:

  • dig php.net 返回适当的结果。防火墙中的 53 端口也是开放的。 PHP 版本在我的本地机器上是 5.3,在我的服务器上是 5.4。
【解决方案2】:

客户端需要 dns 和 dhcp 或硬编码填空。

服务器通常对任何仅响应其 ip addr 定向流量的东西视而不见

【讨论】:

    【解决方案3】:

    项目在 docker 容器中运行时遇到类似问题。

    为了解决这个问题,我们使用了Net_DNS2 而不是原生的dns_get_record,并直接指定了应该使用哪个 DNS 服务器。

    $dnsResolver = new Net_DNS2_Resolver([
        'nameservers' => ['8.8.8.8']
    ]);
    $dnsResolver->query('php.net', 'NS');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2021-09-15
      相关资源
      最近更新 更多