ZetCode

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 地址用于负载均衡时很有用。

最佳实践

来源

PHP gethostbyname 文档

本教程通过在各种场景下进行主机名到 IP 地址解析的实际示例,介绍了 PHP 的 gethostbyname 函数。

作者

我叫 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 网络函数