PHP gethostbyname 函数
最后修改于 2025 年 4 月 4 日
PHP 的 gethostbyname 函数用于将主机名解析为 IP 地址。它执行正向 DNS 查询,将域名转换为 IPv4 地址。
基本定义
gethostbyname 将主机名翻译为其对应的 IPv4 地址。它会查询 DNS 服务器来执行解析。返回一个包含 IP 地址的字符串。
语法:gethostbyname(string $hostname): string。如果解析失败,则返回 IP 地址或原始主机名。简单但有效。
基本主机名解析
此示例演示了 gethostbyname 的最简单用法。
basic_resolution.php
<?php declare(strict_types=1); $hostname = "www.example.com"; $ip = gethostbyname($hostname); echo "The IP address of $hostname is: $ip";
此代码将 www.example.com 解析为其 IPv4 地址。如果解析失败,它将返回原始主机名。始终验证结果是否为 IP 地址。
检查解析是否成功
此示例演示了如何验证主机名解析是否成功。
check_resolution.php
<?php
declare(strict_types=1);
$hostname = "www.example.com";
$ip = gethostbyname($hostname);
if ($ip !== $hostname) {
echo "Resolution successful: $ip";
} else {
echo "Resolution failed for $hostname";
}
如果解析失败,该函数将返回输入的主机名。这种模式有助于清楚地区分成功和失败的情况。
解析多个主机名
此示例在一个操作中高效地解析多个主机名。
multi_resolution.php
<?php
declare(strict_types=1);
$hostnames = ["google.com", "yahoo.com", "github.com"];
foreach ($hostnames as $host) {
$ip = gethostbyname($host);
echo "$host resolves to $ip\n";
}
这演示了批量处理主机名解析。对于需要一次解析多个域名的应用程序很有用。
构建 URL 验证器
此示例创建了一个检查域名解析的 URL 验证器。
url_validator.php
<?php
declare(strict_types=1);
function validateUrl($url) {
$parsed = parse_url($url);
if (!isset($parsed['host'])) return false;
$ip = gethostbyname($parsed['host']);
return $ip !== $parsed['host'];
}
$url = "https://www.example.com";
echo validateUrl($url) ? "Valid URL" : "Invalid URL";
此函数从 URL 中提取主机名并验证其解析。与其它验证结合使用,可进行全面的 URL 检查。
与 gethostbynamel 比较
此示例显示了 gethostbyname 和 gethostbynamel 之间的区别。
compare_resolution.php
<?php
declare(strict_types=1);
$hostname = "www.google.com";
$single_ip = gethostbyname($hostname);
$all_ips = gethostbynamel($hostname);
echo "Single IP: $single_ip\n";
echo "All IPs: " . implode(", ", $all_ips);
gethostbyname 返回一个 IP 地址,而 gethostbynamel 返回所有 IP 地址。当主机有多个 IP 地址用于负载均衡时很有用。
最佳实践
- 错误处理: 始终检查解析是否成功
- 缓存: 缓存结果以避免重复的 DNS 查询
- IPv6: 使用
dns_get_record支持 IPv6 - 超时: 在生产环境中考虑 DNS 查询超时
来源
本教程通过在各种场景下进行主机名到 IP 地址解析的实际示例,介绍了 PHP 的 gethostbyname 函数。
作者
列出 所有 PHP 网络函数。