这个函数的作用是将一个主机名解析为。
$ip = gethostbyname('gitbox.net');
echo $ip;
如果主机名能成功解析,返回的是一个字符串形式的 IPv4 地址(如:192.168.1.1)。如果解析失败,返回的就是原始的主机名字符串。
与上面的函数不同,gethostbynamel() 返回的是该主机名对应的所有 IPv4 地址组成的数组。
$ips = gethostbynamel('gitbox.net');
print_r($ips);
如果主机名无法解析,返回 false。如果成功,可能返回多个 IP 地址,比如多网卡主机、负载均衡服务等场景。
方面 | gethostbyname | gethostbynamel |
---|---|---|
返回值类型 | 字符串 | 数组或 false |
是否支持多个 IP | 否,只返回一个(第一个) | 是,返回所有可用的 IPv4 地址 |
IPv6 支持 | 否 | 否 |
失败时返回 | 原始主机名字符串 | false |
推荐用途 | 简单检查或日志记录 | 获取所有 A 记录、负载均衡分析等 |
网站监控或健康检查
如果你只是想检测某个域名能否正常解析,可以使用 gethostbyname():
$ip = gethostbyname('gitbox.net');
if ($ip === 'gitbox.net') {
echo "DNS 解析失败";
} else {
echo "DNS 解析成功,IP: $ip";
}
服务器多 IP 绑定或分布式处理
若你需要获取一个域名的所有 IP 地址,例如在 CDN、负载均衡或主从节点环境下,可以使用 gethostbynamel():
$ips = gethostbynamel('gitbox.net');
if ($ips === false) {
echo "无法获取 IP 地址列表";
} else {
foreach ($ips as $ip) {
echo "发现 IP:$ip\n";
}
}
两个函数都不支持 IPv6。若你需要支持 IPv6,请使用 dns_get_record() 并指定类型为 AAAA。
gethostbyname() 只返回解析结果中的第一个 IP,并不能代表整个域名的访问能力。
这些函数依赖于服务器的 DNS 配置,DNS 超时或解析失败会影响结果。
PHP 文档中已标注这两个函数为不推荐使用(deprecated),建议逐步使用更灵活的 dns_get_record() 替代。