使用NetDNS或get_dns_record获取Cname记录

时间:2013-01-15 05:51:13

标签: php dns pear

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

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

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

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

Why wouldn't dns_get_record show CNAMEs when I KNOW they exist?

并最终尝试使用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记录列表。

1 个答案:

答案 0 :(得分:1)

使用PHP 5.4.9。

第一条记录(cweiske.de)不是CNAME,而是直接指向一个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进行测试。