checkdnsrr

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

checkdnsrr检查与给定互联网主机名或 IP 地址相对应的 DNS 记录

描述

checkdnsrr(string $hostname, string $type = "MX"): bool

搜索 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) 手册页

添加注释

用户贡献的注释 6 个注释

34
Krisztin Ferenczi
10 年前
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
16
Martin
7 年前
重要警告

您需要在主机名末尾添加一个点,以使其成为完全限定域名。

要了解原因,请尝试执行以下代码段

$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”存在
-1
n at zay dot uk
3 年前
我总是认为您应该说明显而易见的事情。
包含 checkdnsrr 的函数将在没有互联网连接的情况下返回 false。
因此,在生产环境中,您需要一个活动的互联网连接才能使用有效的电子邮件地址返回 true 结果。
-1
Patrick
19 年前
这是一个将以两种方式验证电子邮件地址的小代码示例
- 首先使用正则表达式检查字符串的一般语法
- 然后使用“checkdnsrr”函数检查域名子字符串(“@”之后)

<?php

function validate_email($email){

$exp = "^[a-z\'0-9]+([._-][a-z\'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+))+$";

if(
eregi($exp,$email)){

if(
checkdnsrr(array_pop(explode("@",$email)),"MX")){
return
true;
}else{
return
false;
}

}else{

return
false;

}
}

?>
-6
criffoh at gmail dot com
11 年前
无法验证使用“ñ”的域名。

在我的国家,可以使用“ñ”字符注册域名。例如

ñandu.cl
http://nic.cl/cgi-bin/dom-CL?q=%F1andu

如果我使用此函数检查 DNS 记录,它将返回 false,但域名已存在

var_dump(checkdnsrr('ñandu.cl', 'A')); // 返回 false
-18
dobs
6 年前
$this->_buf - 用于批量检查缓存

function ValidateEmail($email)
{
list($user, $domain) = explode('@', $email);

if (!filter_var($email, FILTER_VALIDATE_EMAIL) !== FALSE)
return 0;

if (isset($this->_buf[$domain]))
return $this->_buf[$domain];

if (checkdnsrr($domain) === FALSE) {
$this->_buf[$domain] = 0;
return 0;
}
$this->_buf[$domain] = 1;

return 1;
}
To Top