求一个PHP功能,获取本地绑定ip

服务器是绑定多ip的,PHP怎么获取到这些IP地址呢?有什么函数,还是方法吗?

用shell_exec或者exec执行系统命令获取,不过需要管理员权限,租用的虚拟机就不用想了
windows系统执行ipconfig命令,需要正则分析获取下ip地址


<meta charset="utf-8"/>
<?php
$res = shell_exec("ipconfig");
$str = iconv("GBK", "UTF-8", $res);//转码,要不会会乱码
$str.=$str;//实际运用去掉这句,我这里为了模拟双网卡内容,多组合了一次数据
echo $str;
preg_match_all("/IPv4.+?:([^\n]+)/i",$str,$mc);
print_r($mc[1]);
?>

Debian Linux.

<?php
$command = '/sbin/ifconfig | awk -v RS="\n\n" \'{ for (i=1; i<=NF; i++) if ($i == "inet" && $(i+1) ~ /^addr:/) address = substr($(i+1), 6); if (address != "127.0.0.1") printf "%s\t%s\n", $1, address }\' | awk \'{ print $2}\'';
$ips = shell_exec($command);
echo $ips;
?>

代码来源:

该回答引用chatgpt:
在服务器上绑定多个IP地址时,可以使用 PHP 中的 $_SERVER 超全局变量来获取客户端连接所使用的 IP 地址。下面是一些获取 IP 地址的方法:

$_SERVER['REMOTE_ADDR']
$_SERVER['REMOTE_ADDR'] 是客户端连接所使用的 IP 地址。但是,如果客户端连接通过代理或负载均衡器等中间件,则此变量的值可能会被篡改或变为中间件的 IP 地址。

$_SERVER['HTTP_X_FORWARDED_FOR']
$_SERVER['HTTP_X_FORWARDED_FOR'] 可以用于检测客户端连接是否通过代理或负载均衡器等中间件。如果存在该变量且值不为空,则该变量的值即为客户端连接的真实 IP 地址,且多个 IP 地址使用逗号分隔。但是,该变量的值也可能被篡改,因此不一定可信。

$_SERVER['HTTP_CLIENT_IP']
$_SERVER['HTTP_CLIENT_IP'] 通常不被推荐使用,因为该变量仅适用于某些代理,且可能被篡改。

getenv('REMOTE_ADDR')
getenv('REMOTE_ADDR') 可以用于获取客户端连接所使用的 IP 地址。但是,它只适用于 CGI 环境,不适用于其他环境。

在 PHP 中,您可以使用 $_SERVER 超全局变量来获取服务器绑定的多个 IP 地址。具体来说,您可以使用 $_SERVER['SERVER_ADDR'] 来获取服务器默认的 IP 地址,或者使用 $_SERVER['SERVER_NAME'] 来获取服务器的主机名。

如果您的服务器绑定了多个 IP 地址,您可以使用 $_SERVER['HTTP_HOST'] 来获取客户端请求的主机名,然后使用 DNS 解析函数(如 gethostbyname())来获取主机名对应的 IP 地址。

此外,您还可以使用 gethostbyname() 函数来获取服务器主机名的 IP 地址列表,如下所示:


```php
$ips = gethostbynamel($_SERVER['SERVER_NAME']);
print_r($ips);


该函数将返回一个 IP 地址的数组,其中每个元素都是一个字符串。请注意,这些 IP 地址可能包含本地回环地址(127.0.0.1)和 IPv6 地址,具体取决于您的服务器配置。

```

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632