PHP Conference Japan 2024

gethostbynamel

(PHP 4, PHP 5, PHP 7, PHP 8)

gethostbynamel 取得對應於指定網際網路主機名稱的 IPv4 位址清單

說明

gethostbynamel(字串 $hostname): 陣列|false

傳回由 hostname 指定的網際網路主機所解析的 IPv4 位址清單。

參數

hostname

主機名稱。

傳回值

傳回 IPv4 位址的陣列,如果 hostname 無法解析,則傳回 false

範例

範例 #1 gethostbynamel() 範例

<?php
$hosts
= gethostbynamel('www.example.com');
print_r($hosts);
?>

以上範例會輸出

Array
(
    [0] => 192.0.34.166
)

另請參閱

  • gethostbyname() - 取得指定網際網路主機名稱對應的 IPv4 位址
  • gethostbyaddr() - 取得指定 IP 位址對應的網際網路主機名稱
  • checkdnsrr() - 檢查指定網際網路主機名稱或 IP 位址對應的 DNS 記錄
  • getmxrr() - 取得指定網際網路主機名稱對應的 MX 記錄
  • named(8) 使用手冊

新增註解

使用者貢獻的註解 5 則註解

9
ab at null dot ixo dot ca
8 年前
如果使用 gethostbyname 查詢本地主機名稱總是返回 127.0.0.1,但您想要 DNS 位址,只需在名稱後面加上一個點。例如:

$foo = gethostbynamel("myhost.example.com");
print_r($foo);

...會得到以下結果
陣列
(
[0] => 127.0.0.1
)

然後在名稱後面加上一個點

$foo = gethostbynamel("myhost.example.com.");
print_r($foo);

...現在您會得到類似以下的結果
陣列
(
[0] => 172.217.1.99
)
-2
info at methfessel-computers.de
18 年前
解決方案很簡單。只需在網址後面加上一個 . (點) 即可正確解析名稱。

沒有這個點,PHP 會認為它是您本地網域的子網域,因此會返回「本地 IP」。
-2
Skyld at o2 dot co dot uk
20 年前
顯然,在某些情況下,並非所有 IP 在檢查主機名稱時都有用。有時,並非所有 IP 都能正常運作。這段程式碼會從列表中檢查第一個可用的 IP。或者至少它應該這樣做 - 我還沒有時間測試它。
需要網域名稱參數,埠和最大檢查 IP 數是可選的。
如果未設定埠,它將檢查 HTTP 埠 80,如果未設定最大檢查 IP 數,它將只檢查列表中的前 10 個 IP。
希望它能幫助到某些人。

<?php
函式 checkhostlist($domain, $port = 80, $maxipstocheck = 10) {
?
$hosts = gethostbynamel($domain);
for (
$chk=0;$chk<$maxipstocheck;$chk++) {
if (isset(
$hosts[$chk])) {
$th = fsockopen($domain, $port);
if (
$th) {
fclose($th);
return
$hosts[$chk];
break;
}
}
}
}
?>
-3
webdev at concraption dot com
19 年前
在 PHP 5.0.4 中,如果查找失敗,gethostbynamel 會返回空字串而不是 false。一個簡單的解決方法是在 IF 區塊中使用 is_array()

<?
$hosts = gethostbynamel($hostname);
if (is_array($hosts)) {
echo "主機 ".$hostname." 解析為:<br><br>";
foreach ($hosts as $ip) {
echo "IP: ".$ip."<br>";
}
} else {
echo "主機 ".$hostname." 未綁定任何 IP。";
}
?>
-5
匿名
6 年前
不要使用 http 協定,gethostbynamel 函式中
To Top