2013-01-15 52 views
0

我试图使用PHP获取CNAME记录的列表。使用NetDNS获取Cname记录或get_dns_record

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

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

我不能说我自称OS有很大的任何事情,也许我有一些设置,允许这个工作,我的老机器上的某种方式。它目前返回一个简单的空数组,它用于返回与我的DNS管理服务中的内容相匹配的CNAME记录列表。我在这里阅读文章:

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

,最终试图实现与梨的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

适用于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 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来测试。

+0

你的两个结果都显示出我期待的结果。 'dns_get_record('domain.com',DNS_CNAME);'应该返回该域的CNAME记录列表,包括a.domain.com,b.domain.com和www.domain.com。基本上所有你能够用'dns_get_record'和'dig'完成的事情就是确认你输入的URL是一个CNAME记录,并且需要指向一个A记录。以前,当传递DNS_CNAME作为参数时,'dns_get_record'像我期望的那样工作 - 它仍然像这样用DNS_MX和DNS_NS工作。 –

+0

没有办法获得给定服务器的所有子域的列表。 'NS'列出给定域的名称服务器,'MX'列出给定域的邮件服务器。 'A'为您提供域名的IP,'CNAME'为您提供CNAME“父母”,如果域名有一个。我想你误解了DNS允许什么,什么不允许。 – cweiske

+0

想象一下,如果你问“.com”他们的CNAME或他们的身份,会发生什么 - 他们会给你所有.com的子域名。 – cweiske