关于PHP获取服务器地址的方法

本文介绍了几种获取服务器IP地址的方法,包括使用$_SERVER['SERVER_ADDR']、gethostbyname结合$_SERVER['HOSTNAME']以及通过执行ifconfig命令并解析结果。讨论了各种方法的适用场景及其局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、获取服务器本地地址,最先想到的方法是根据$_SERVER['SERVER_ADDR']

但在命令行运行程序时,获取就获取不到结果。

<?php 
var_dump($_SERVER['SERVER_ADDR']);

 

网页访问结果:string(14) "172.16.152.239"

命令行结果:

[root@lamp1 www]# php index.php 
NULL

2、使用gethostbyname获取

对于命令行来说,可以取到$_SERVER['HOSTNAME'],如果在/etc/hosts里设置了本机名称对应的ip地址的话,则可以使用gethostbyname($_SERVER['HOSTNAME'])来获取服务器IP地址,再结合$_SERVER['SERVER_ADDR']就得到通用的方法

复制代码
<?php
function get_server_ip(){
        if(!empty($_SERVER['SERVER_ADDR']))
                return $_SERVER['SERVER_ADDR'];
        return gethostbyname($_SERVER['HOSTNAME']);
}

var_dump(get_server_ip());
复制代码

 

 

缺点也很明显:就是如果机器没有设置hosts的话gethostbyname就解析不出Ip地址,只能获取本机名称

3、使用系统命令

最原始也是最奏效的方法,使用底层信息ifconfig(ipconfig for windows)。使用shell_exec命令执行ifconfig,然后从字符串中解析出地址来

复制代码
<?php
function get_server_ip(){
        if(!empty($_SERVER['SERVER_ADDR']))
                return $_SERVER['SERVER_ADDR'];
        $result = shell_exec("/sbin/ifconfig");
        if(preg_match_all("/addr:(\d+\.\d+\.\d+\.\d+)/", $result, $match) !== 0){
                foreach($match[0] as $k=>$v){
                        if($match[1][$k] != "127.0.0.1")
                                return $match[1][$k];
                }
        }
        return false;
}
复制代码

 

当然还可对windows做平台适配,这里就不做了,因为实际互联网公司的服务器中基本没有采用windows做服务器的,何况是PHP做后台语言的呢。:)

结束语:其实对于一个服务器来说,可能存在多个网口,所以获取服务器ip这个术语并不准确,它可以是一组ip,可能这也是为什么php没有提供一个通用的获取方法吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值