0

我正在尝试使用 PHP 获取 CNAME 记录列表。

当我在旧的 Windows 7 机器上托管代码时,此方法曾经有效,但我将其移至 Ubuntu 机器(类似 AMP 堆栈设置),它不再返回$url. 我将代码上传到 Windows 服务器,但仍然没有 CNAME 记录。

$records['cname'] = dns_get_record($url, DNS_CNAME);

并不是说我声称操作系统与任何事情有很大关系,也许我在我的旧机器上以某种方式设置了一些允许它工作的东西。它当前返回一个简单的空数组,因为它曾经返回与我的 DNS 管理服务中的内容匹配的 CNAME 记录列表。我在这里读过这篇文章:

当我知道它们存在时,为什么 dns_get_record 不显示 CNAME?

并最终尝试使用 Pear 的 NetDns2 库实现该功能,并使用以下代码。而且,answer响应的数组仍然是空的。不确定从 get_dns_record 到 NetDNS2 的问题是否相同,或者我在这两种情况下都做错了什么,但测试的站点肯定有 CNAME 记录,包括google.comyahoo.com.

//using Google Name Server
$rslvr = new Net_DNS2_Resolver(array('nameservers' => array('8.8.8.8')));
$records['cname'] = $rslvr->query($url, 'CNAME');

感谢您提供任何帮助,最终目标是能够像我在旧机器上一样获得 CNAME 记录列表。

4

1 回答 1

1

适用于 PHP 5.4.9。

第一条记录 (cweiske.de) 是 noCNAME但直接指向一个 IP 地址:

php > var_dump(dns_get_record('cweiske.de', DNS_CNAME));
array(0) {
}

第二个实际上是第一条记录的 CNAME:

php > var_dump(dns_get_record('www.cweiske.de', DNS_CNAME));
array(1) {
  [0] =>
  array(5) {
    'host' =>
    string(14) "www.cweiske.de"
    'class' =>
    string(2) "IN"
    'ttl' =>
    int(86400)
    'type' =>
    string(5) "CNAME"
    'target' =>
    string(10) "cweiske.de"
  }
}

dig显示相同:

$ dig cweiske.de
cweiske.de.     577 IN  A   83.169.7.198

$ dig www.cweiske.de
www.cweiske.de.     86397   IN  CNAME   cweiske.de.
cweiske.de.     597 IN  A   83.169.7.198

要检查是您的问题还是 PHP 的问题,请使用 dig 或 nslookup 进行测试。

于 2013-01-23T21:16:20.483 回答