PHP Conference Japan 2024

gethostbynamel

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

gethostbynamel 获取与给定互联网主机名对应的 IPv4 地址列表

描述

gethostbynamel(字符串 $hostname): 数组|false

返回一个 IPv4 地址列表,这些地址是 hostname 指定的互联网主机解析到的地址。

参数

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 条注释

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
)
info at methfessel-computers.de
18 年前
解决方案很简单。只需在 URL 末尾添加一个点(.)即可正确解析名称。

没有这个点,PHP 会认为它是你本地域的子域,因此返回“本地IP”。
Skyld at o2 dot co dot uk
20 年前
显然,在某些情况下,检查主机名时并非所有 IP 都可能有用。有时,并非所有 IP 都能正常工作。此代码将检查列表中第一个可用的 IP。或者至少应该这样 - 我还没有时间测试它。
需要域参数,端口和最大检查 IP 数量是可选的。
如果未设置端口,它将检查 HTTP 端口 80,如果未设置要检查的最大 IP 数量,它将只检查列表中的前 10 个 IP。
希望它能帮助到某些人。

<?php
function 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;
}
}
}
}
?>
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。";
}
?>
匿名用户
6年前
不要使用http协议,gethostbynamel函数中
To Top