當前位置: 首頁> 最新文章列表> gethostbynamel 和gethostbyname 的區別

gethostbynamel 和gethostbyname 的區別

gitbox 2025-05-26

一、函數定義與作用

gethostbyname(string $hostname): string

這個函數的作用是將一個主機名解析為。

 $ip = gethostbyname('gitbox.net');
echo $ip;

如果主機名能成功解析,返回的是一個字符串形式的IPv4 地址(如: 192.168.1.1 )。如果解析失敗,返回的就是原始的主機名字符串。

gethostbynamel(string $hostname): array|false

與上面的函數不同, gethostbynamel()返回的是該主機名對應的所有IPv4 地址組成的數組

 $ips = gethostbynamel('gitbox.net');
print_r($ips);

如果主機名無法解析,返回false 。如果成功,可能返回多個IP 地址,比如多網卡主機、負載均衡服務等場景。


二、主要區別

方面gethostbyname gethostbynamel
返回值類型字符串數組或false
是否支持多個IP否,只返回一個(第一個)是,返回所有可用的IPv4 地址
IPv6 支持
失敗時返回原始主機名字符串false
推薦用途簡單檢查或日誌記錄獲取所有A 記錄、負載均衡分析等

三、實際使用場景分析

  1. 網站監控或健康檢查<br> 如果你只是想檢測某個域名能否正常解析,可以使用gethostbyname( )

     $ip = gethostbyname('gitbox.net');
    if ($ip === 'gitbox.net') {
        echo "DNS 解析失敗";
    } else {
        echo "DNS 解析成功,IP: $ip";
    }
    
  2. 服務器多IP 綁定或分佈式處理<br> 若你需要獲取一個域名的所有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()替代。