📅  最后修改于: 2023-12-03 15:41:28.905000             🧑  作者: Mango
在 PHP 中获取服务器的 IP 地址是一项很常见的任务。无论您是想回显服务器的公网 IP 地址,还是获取服务器上的“本地”(即内部)IP 地址,本文都将为您提供各种获取服务器 IP 地址的方法。
有时,您想要公开显示服务器的公网(即 Internet)IP 地址。有许多 API 或服务可以提供这些信息。以下是使用 file_get_contents
函数获取服务器 IP 地址的示例代码:
$server_ip = file_get_contents('https://api.ipify.org');
echo $server_ip;
上述代码使用 file_get_contents
函数从 https://api.ipify.org 访问来自外部源的数据。API 返回的是当前服务器正在使用的公网 IP 地址。请注意,如果您想要更新 IP 则必须隔一段时间重新访问该 API。
如需获取服务器上的“本地”IP地址,则需要更改上述代码片段。达到此目的有很多方法,以下是我们提供的一些方法。
$_SERVER['SERVER_ADDR'] 变量包含当前 PHP 脚本所在的服务器的 IP 地址。通过以下代码,您可以在 PHP 中访问该变量:
$server_ip = $_SERVER['SERVER_ADDR'];
echo $server_ip;
有时,服务器可能有多个网卡或多个 IP 地址。在这种情况下,$_SERVER['SERVER_ADDR']
变量将返回多个 IP 地址,其中包括您可能不需要的地址。如果您需要仅获取第一个 IP 地址,以下是一些代码示例:
function get_server_ip_address() {
if ($_SERVER['SERVER_ADDR']) {
$server_ip_address = $_SERVER['SERVER_ADDR'];
} else {
$server_ip_address = gethostbyname(gethostname());
}
return $server_ip_address;
}
echo get_server_ip_address();
上述代码段中 get_server_ip_address()
函数尝试获取 $ _SERVER
中的 IP 地址,如果未成功,则使用 gethostbyname
函数从计算机系统的主机名返回 IP 地址。
更一般的方法是使用一个网络套接字来获取服务器 IP 地址。使用此方法后可以在脚本运行时动态查找本地 IP 地址。以下代码演示了如何使用 PHP 中的 socket
功能从脚本中获取本地 IP 地址:
function get_server_ip() {
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($socket, '8.8.8.8', 53);
socket_getsockname($socket, $address, $port);
socket_close($socket);
return $address;
}
echo get_server_ip();
上述代码中,我们创建一个网络套接字(使用 socket_create
)。然后我们将套接字连接到 8.8.8.8
(谷歌的 DNS 服务器),连接到成功后返回套接字所绑定的 IP 地址;最后我们关闭套接字 (使用 socket_close
)。
本文提供了获取服务器 IP 地址的三种方法,以前两种方法最为常用,可通过 $_SERVER['SERVER_ADDR']
或使用 gethostbyname
函数来实现;第三种方法使用网络套接字来获取 IP 地址。在实际开发中,请根据您的需求,选择最适合您的方法。