📜  获取服务器 ip php (1)

📅  最后修改于: 2023-12-03 15:41:28.905000             🧑  作者: Mango

获取服务器 IP PHP

在 PHP 中获取服务器的 IP 地址是一项很常见的任务。无论您是想回显服务器的公网 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 地址

如需获取服务器上的“本地”IP地址,则需要更改上述代码片段。达到此目的有很多方法,以下是我们提供的一些方法。

方法 1: 使用 $_SERVER['SERVER_ADDR']

$_SERVER['SERVER_ADDR'] 变量包含当前 PHP 脚本所在的服务器的 IP 地址。通过以下代码,您可以在 PHP 中访问该变量:

$server_ip = $_SERVER['SERVER_ADDR'];
echo $server_ip;
方法 2: 获取第一个 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 地址。

方法 3: 使用网络套接字

更一般的方法是使用一个网络套接字来获取服务器 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 地址。在实际开发中,请根据您的需求,选择最适合您的方法。