(PHP 5, PHP 7, PHP 8)
dns_get_record — 获取指定主机名的 DNS 纪录
$hostname
,$type
= DNS_ANY
,&$authoritative_name_servers
= null
,&$additional_records
= null
,$raw
= false
获取指定 hostname
的 DNS 纪录。
hostname
hostname
应该是有效的 DNS 主机名,比如“www.example.com
”。可以使用
in-addr.arpa
表示法生成反向查找,但大多数情况下更适合用 gethostbyaddr()。
注意:
根据 DNS 标准,邮件地址以
user.host
格式给出(例如:hostmaster.example.com
而不是hostmaster@example.com
),请务必检查此值并在必要时进行修改,然后将其与 mail() 等函数一起使用。
type
默认情况下,dns_get_record() 将会搜索跟 hostname
关联的任何资源记录。要限制查询,可以指定可选的 type
选项。可以是以下之一:DNS_A
、DNS_CNAME
、DNS_HINFO
, DNS_CAA
、DNS_MX
、DNS_NS
、DNS_PTR
、DNS_SOA
、DNS_TXT
、DNS_AAAA
、DNS_SRV
、DNS_NAPTR
、DNS_A6
、DNS_ALL
或 DNS_ANY
。
注意:
因为不同平台间的 libresolv 存在性能差异,
DNS_ANY
不会始终返回每条记录,较慢的DNS_ALL
会更可靠的收集所有记录。
注意:
authoritative_name_servers
引用传递,如果给出,将会填充权威名称服务器的资源记录。
additional_records
引用传递,如果给出,将会填充任何附加记录。
raw
type
将解释为原始 DNS 类型 ID(不能使用 DNS_*
常量)。返回值包含 data
键,需要手动解析。
此函数返回由关联数组组成的数组, 或者在失败时返回 false
。每个关联数组至少包含以下键:
属性 | 含义 |
---|---|
host | 与其余相关数据引用的 DNS 命名空间中的记录。 |
class |
dns_get_record() 仅返回内部类记录,因此参数将始终返回 IN 。
|
type | 包含记录类型的字符串。其他属性也包含在结果数组中,具体取决于 type 的值。查看下表。 |
ttl |
与此记录相关的 "Time To Live" 。
这将不会等于记录的原始 ttl,而是等于原始 ttl 减去自权威名称服务器查询以来经过的时间长度。
|
类型 | 额外列 |
---|---|
A |
ip :点分十进制格式的 IPv4。
|
MX |
pri :邮件交换器的有优先级。较低的数字有较高的优先级。target :邮件服务器的
FQDN(全称域名)。参阅 dns_get_mx()。
|
CNAME |
target :该记录在 DNS 命名空间中的 FQDN 别名。
|
NS |
target :此主机名的权威名称服务器的 FQDN。
|
PTR |
target :此记录指向的 DNS 命名空间中的位置。
|
TXT |
txt :跟此记录关联的任意字符串数据。
|
HINFO |
cpu :指定此记录引用的机器的 CPU 的 IANA 号。
os :指定此记录引用的机器的操作系统的 IANA 号。
请参阅 IANA 的 » Operating System Names 。
|
CAA |
flags :单字节位字段;目前仅定义了第 0
位,意味着“critical”;其他位保留且应该忽略。tag :CAA
标记名(字母数字的 ASCII 字符串)。value :CAA
标记值(二进制字符串,可以使用子格式)。更多信息参阅:» RFC 6844。
|
SOA |
mname :资源记录来源的机器的 FQDN。
rname :此域的管理联系人的电子邮件地址。
serial :请求域的此修订的序列号。
refresh :次要名称服务器在更新此域的远程副本时应使用的刷新间隔(秒)。
retry :在刷新失败后等待的时间长度(秒),然后再进行第二次尝试。
expire :在成功刷新之前,次要 DNS 服务器应保留远程副本的最长时间(秒)。
minimum-ttl :客户端可以继续使用 DNS 解析的最短时间(秒),
在此之前应该从服务器请求新的解析。可以被单独的资源记录覆盖。
|
AAAA |
ipv6 :IPv6 地址
|
A6 |
masklen :从 chain 指定的目标继承的长度(以位为单位)。
ipv6 :要与 chain 合并的特定记录的地址。
chain :要与 ipv6 数据合并的父记录。
|
SRV |
pri :(优先级)应该首先使用最低优先级。
weight :用于加权常见优先级的目标应该随机选择。
target 和 port :请求服务的主机名和端口。
更多信息参阅:» RFC 2782。
|
NAPTR |
order 和 pref :等同于上面的 pri 和 weight 。
flags 、services 、regex 和 replacement :
由 » RFC 2915 定义的参数。
|
版本 | 说明 |
---|---|
7.0.16, 7.1.2 | 新增对 CAA 记录的支持。 |
示例 #1 使用 dns_get_record()
<?php
$result = dns_get_record("php.net");
print_r($result);
?>
以上示例的输出类似于:
Array ( [0] => Array ( [host] => php.net [type] => MX [pri] => 5 [target] => pair2.php.net [class] => IN [ttl] => 6765 ) [1] => Array ( [host] => php.net [type] => A [ip] => 64.246.30.37 [class] => IN [ttl] => 8125 ) )
示例 #2 使用 dns_get_record() 和 DNS_ANY
一旦解析了 MX 记录,通常需要邮件服务器的 IP 地址,因此 dns_get_record()
还会在 additional_records
中返回包含关联记录的数组。authoritative_name_servers
也会返回,包含权威名称服务器列表。
<?php
/* 为 php.net 请求“ANY”记录,并创建 $authns 和 $addtl 数组,
包含名称服务器列表和任何附加记录列表 */
$result = dns_get_record("php.net", DNS_ANY, $authns, $addtl);
echo "Result = ";
print_r($result);
echo "Auth NS = ";
print_r($authns);
echo "Additional = ";
print_r($addtl);
?>
以上示例的输出类似于:
Result = Array ( [0] => Array ( [host] => php.net [type] => MX [pri] => 5 [target] => pair2.php.net [class] => IN [ttl] => 6765 ) [1] => Array ( [host] => php.net [type] => A [ip] => 64.246.30.37 [class] => IN [ttl] => 8125 ) ) Auth NS = Array ( [0] => Array ( [host] => php.net [type] => NS [target] => remote1.easydns.com [class] => IN [ttl] => 10722 ) [1] => Array ( [host] => php.net [type] => NS [target] => remote2.easydns.com [class] => IN [ttl] => 10722 ) [2] => Array ( [host] => php.net [type] => NS [target] => ns1.easydns.com [class] => IN [ttl] => 10722 ) [3] => Array ( [host] => php.net [type] => NS [target] => ns2.easydns.com [class] => IN [ttl] => 10722 ) ) Additional = Array ( [0] => Array ( [host] => pair2.php.net [type] => A [ip] => 216.92.131.5 [class] => IN [ttl] => 6766 ) [1] => Array ( [host] => remote1.easydns.com [type] => A [ip] => 64.39.29.212 [class] => IN [ttl] => 100384 ) [2] => Array ( [host] => remote2.easydns.com [type] => A [ip] => 212.100.224.80 [class] => IN [ttl] => 81241 ) [3] => Array ( [host] => ns1.easydns.com [type] => A [ip] => 216.220.40.243 [class] => IN [ttl] => 81241 ) [4] => Array ( [host] => ns2.easydns.com [type] => A [ip] => 216.220.40.244 [class] => IN [ttl] => 81241 ) )