這個函數的作用是將一個主機名解析為。
$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 記錄、負載均衡分析等 |
網站監控或健康檢查<br> 如果你只是想檢測某個域名能否正常解析,可以使用gethostbyname( )
$ip = gethostbyname('gitbox.net');
if ($ip === 'gitbox.net') {
echo "DNS 解析失敗";
} else {
echo "DNS 解析成功,IP: $ip";
}
服務器多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()替代。