PHP Conference Japan 2024

checkdnsrr

(PHP 4, PHP 5, PHP 7, PHP 8)

checkdnsrr檢查與給定網際網路主機名稱或 IP 位址對應的 DNS 記錄

說明

checkdnsrr(字串 $hostname, 字串 $type = "MX"): 布林值

在 DNS 中搜尋與 hostname 對應類型為 type 的記錄。

參數

hostname

hostname 可以是點分十進位表示法的 IP 位址或主機名稱。

type

type 可以是以下任何一種:A、MX、NS、SOA、PTR、CNAME、AAAA、A6、SRV、NAPTR、TXT 或 ANY。

回傳值

如果找到任何記錄,則返回 true;如果未找到記錄或發生錯誤,則返回 false

注意事項

備註:

為了與實作此功能之前的 Windows 版本相容,請嘗試使用 » PEAR 類別 » Net_DNS

參見

  • dns_get_record() - 取得與主機名稱關聯的 DNS 資源記錄
  • getmxrr() - 取得與給定網際網路主機名稱對應的 MX 記錄
  • gethostbyaddr() - 取得與給定 IP 位址對應的網際網路主機名稱
  • gethostbyname() - 取得與給定網際網路主機名稱對應的 IPv4 位址
  • gethostbynamel() - 取得與給定網際網路主機名稱對應的 IPv4 位址清單
  • named(8) 手冊頁面

新增註記

使用者貢獻的註記 3 則註記

Krisztin Ferenczi
11 年前
criffoh at gmail dot com 是對的。在檢查網域之前,您必須使用 idn_to_ascii 函式將其轉換為 ASCII。
http://us2.php.net/manual/en/function.idn-to-ascii.php .

var_dump(checkdnsrr('ñandu.cl', 'A')); // 返回 false
var_dump(checkdnsrr(idn_to_ascii('ñandu.cl'), 'A')); // 返回 true
Martin
8 年前
重要警告

您需要在主機名稱的末尾添加一個點,才能使其成為完整的網域名稱 (FQDN)。

要了解原因,請嘗試執行以下程式碼片段

$d1="gmail.con";
$d2="gmail.con.";
$r1=checkdnsrr($d1, "MX");
$r2=checkdnsrr($d2, "MX");
var_dump($r1);
var_dump($r2);

您會看到,如果沒有這個點,它會聲稱網域「gmail.con」是有效的。

請注意,如果您計時「checkdnsrr()」呼叫,您還會發現沒有點的情況下需要更長的時間,因為它將其視為相對網域,並根據其執行的主機名稱進行多次嘗試。

注意:如果您感興趣,將其視為相對網域可以解釋正在發生的事情。如果您的主機是「example.com」,則相對網域最終將解析為「gmail.con.com.」,可以查詢該網域,因此它錯誤地聲稱「gmail.con」存在。
n at zay dot uk
3 年前
我始終認為您應該陳述顯而易見的事情。
在沒有網路連線的情況下,包含 checkdnsrr 的函式將返回 false。
因此,在生產環境中,您需要有效的網際網路連線才能以有效的電子郵件地址返回 true 結果。
To Top