我正在尝试使用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.com
和yahoo.com
。
//using Google Name Server
$rslvr = new Net_DNS2_Resolver(array('nameservers' => array('8.8.8.8')));
$records['cname'] = $rslvr->query($url, 'CNAME');
感谢任何帮助,最终目标是能够获得像我在旧机器上的CNAME记录列表。
答案 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进行测试。