ZetCode

PHP gethostbynamel 函数

最后修改于 2025 年 4 月 4 日

PHP 的 gethostbynamel 函数返回与主机名关联的所有 IP 地址。当一个域名有多个 IP 地址时,它非常有用。

基本定义

gethostbynamel 将主机名解析为 IPv4 地址数组。它对给定的域名执行 DNS A 记录查找。

语法: gethostbynamel(string $hostname): array|false。成功时返回 IP 地址数组,失败时返回 false。需要访问 DNS 服务器。

基本主机名解析

此示例显示了如何获取主机名的所有 IP 地址。

basic_resolution.php
<?php

declare(strict_types=1);

$hostname = "www.google.com";
$ips = gethostbynamel($hostname);

if ($ips !== false) {
    echo "IP addresses for $hostname:\n";
    print_r($ips);
} else {
    echo "Could not resolve $hostname";
}

此代码将 www.google.com 解析为其 IP 地址。大型网站通常有多个 IP 地址用于负载均衡和冗余。

处理解析失败

这演示了在主机名解析失败时如何进行适当的错误处理。

error_handling.php
<?php

declare(strict_types=1);

$hostname = "nonexistent.example";
$ips = gethostbynamel($hostname);

if ($ips === false) {
    echo "Failed to resolve $hostname\n";
    $error = error_get_last();
    echo "Error: " . $error['message'];
}

解析失败时,该函数返回 false。我们检查此情况并在 PHP 的错误系统中显示错误消息。

检查本地主机解析

此示例检查 localhost 如何解析为 IP 地址。

localhost_check.php
<?php

declare(strict_types=1);

$hostname = "localhost";
$ips = gethostbynamel($hostname);

if ($ips !== false) {
    echo "localhost resolves to:\n";
    foreach ($ips as $ip) {
        echo "- $ip\n";
    }
} else {
    echo "Failed to resolve localhost";
}

本地主机通常应解析为 127.0.0.1。这可以验证您的系统主机名解析是否正常工作。

与 gethostbyname 比较

这显示了 gethostbynamel 和 gethostbyname 之间的区别。

comparison.php
<?php

declare(strict_types=1);

$hostname = "www.example.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。这对于拥有多个服务器的服务很重要。

构建主机检查工具

此示例使用 gethostbynamel 创建了一个完整的主机检查工具。

host_checker.php
<?php

declare(strict_types=1);

function checkHost($hostname) {
    $ips = gethostbynamel($hostname);
    
    if ($ips === false) {
        return "Host $hostname could not be resolved";
    }
    
    $result = "Host $hostname resolves to:\n";
    foreach ($ips as $ip) {
        $result .= "- $ip\n";
        $result .= "Reverse: " . gethostbyaddr($ip) . "\n";
    }
    
    return $result;
}

echo checkHost("www.php.net");

此工具解析主机名并显示所有 IP 地址以及反向 DNS 查找。它展示了 gethostbynamel 在一个完整函数中的实际应用。

最佳实践

来源

PHP gethostbynamel 文档

本教程通过实际示例介绍了 PHP gethostbynamel 函数,用于将主机名解析为多个 IP 地址。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。到目前为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出 所有 PHP 网络函数