2009-08-18 64 views
2

在Linux上運行PHP 5.2,我正在運行一系列查詢dns_get_record()。從文檔中可以看出,該功能複製,但我看到了不一致。我的目標是獲得對每個主機名所屬的域具有權威性的主名稱服務器和輔助名稱服務器。PHP5:dns_get_record()只返回子域記錄A

dns_get_record('example.com', DNS_NS);返回良好結果。 dns_get_record('www.example.com', DNS_NS);什麼都不返回。 dns_get_record('www.example.com', DNS_ANY);僅返回A記錄。 dns_get_record('www.example.com', DNS_SOA);什麼也沒有返回。

然而,使用挖一個命令行,我總是可以得到至少SOA:

dig www.example.com NSdig www.example.com SOA

返回一個有效的權威部份(IN SOA)包含的域名服務器。

我該如何在PHP中複製它?我嘗試了PEAR Net_DNS模塊,並看到與dns_get_record()類似的惡作劇。

+1

您如何知道在執行NS或SOA查詢之前'dig'不僅僅是剝離'www.''? – 2009-08-18 16:31:50

+0

我想我不知道它不是。 – brianjcohen 2009-08-19 15:52:50

+0

肖恩·布萊德(幾乎)是正確的。使用「+ trace」選項進行挖掘,看看究竟發生了什麼: Dig將從頂級層次結構中走下來(而不是相反) - 通常,您不會在子域下設置SOA「萬維網」。 PHP的dns_get_record是_not_挖,它只會做你告訴他做的事情。 – lifeofguenter 2014-06-25 11:57:55

回答

1

當你從命令行你更直接(相對)連接到DNS。輸出也爲該場景格式化。當執行php函數時,它會返回其作者認爲會需要的值。不一定直接對應。

如果您想獲得結果,那麼您可以使用exec('dig www.example.com ns');並根據需要解析返回的輸出。

此外,如果您要查詢某個子域的DNS,即www。而不是tld(example.com),那麼你不會得到與其相關的其他記錄 - 你只會得到與該子域相關的結果,在你的情況下,這只是一個A記錄。