2013-01-15 97 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