php怎么获取局域网ip
时间 : 2023-04-26 08:26:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在 PHP 中获取本地局域网 IP 地址,可以使用 `$_SERVER` 上的信息。在 `$_SERVER` 上有一个变量是 `REMOTE_ADDR`,该变量包含访问当前脚本的客户机的 IP 地址。但是,在许多情况下,`REMOTE_ADDR` 变量将返回 Internet 上的公共 IP 地址,而不是局域网中的私有 IP 地址。但是,我们可以使用其他方法获取局域网 IP 地址。

下面介绍两种方法。

## 方法一

使用 `gethostbyname` 函数获取主机名的 IP 地址。`gethostbyname` 函数接受一个主机名作为参数,并返回与主机名关联的 IP 地址。通常,我们可以使用 `gethostname` 函数获取本地主机名,然后将主机名传递给 `gethostbyname` 函数,以获取相应的 IP 地址。这种方法的缺点是,如果服务器或主机名被多个 DNS 服务器解析,则该方法可能会错误地返回不正确的 IP 地址。

下面是代码示例:

```php

$ip = gethostbyname(gethostname());

echo "局域网 IP 地址为:$ip";

## 方法二

使用 `$_SERVER` 全局数组的内容筛选出本地 IP 地址。可以通过分析 `$_SERVER` 数组,筛选出 IP 地址为本地 IP 地址的条目。这种方法基于本地 IP 地址具有固定的格式和开头,因此它是一个更可靠和稳定的解决方案。

下面是代码示例:

```php

$ips = array();

foreach (array('HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'REMOTE_ADDR') as $key) {

if (!empty($_SERVER[$key])) {

$ips[] = trim($_SERVER[$key]);

}

}

foreach ($ips as $ip) {

if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) {

// 本地 IP 地址

echo "局域网 IP 地址为:$ip";

break;

}

}

以上就是获取本地局域网 IP 地址的两种方法,根据情况选择适合自己的方法。

PHP可以使用以下两种方式获取局域网IP地址:

1. 使用$_SERVER变量获取局域网IP

PHP的$_SERVER变量保存了一些有关当前运行脚本的信息,包括当前的请求和服务器信息。其中,$_SERVER['SERVER_ADDR']保存了服务器的本地IP地址,也就是局域网IP地址。可以使用以下代码获取局域网IP:

$localIP = $_SERVER['SERVER_ADDR'];

echo $localIP;

2. 使用socket连接获取局域网IP

使用socket连接也可以获取局域网IP地址。步骤如下:

1. 创建一个UDP套接字

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

2. 向外部地址发送数据包

socket_sendto($sock, "data", 4, 0, "8.8.8.8", 53);

其中,"8.8.8.8"可以是其它任何已知的外部IP地址,如"114.114.114.114"等。

3. 获取本地IP地址

socket_getsockname($sock, $localIP);

echo $localIP;

完整代码如下:

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

socket_sendto($sock, "data", 4, 0, "8.8.8.8", 53);

socket_getsockname($sock, $localIP);

echo $localIP;

注意事项:

1. 运行该代码需要开启socket扩展。

2. 如果使用socket连接获取局域网IP地址时,如果发送的数据包没有收到回应,获取的IP地址可能会是127.0.0.1。可以使用多次重试和异常处理等方式提高获取局域网IP地址的成功率。