必成技术分享:PHP获得服务器本机IP的思路

王志勇 发表于 2019年06月08日 07:40

最近我在Eonval项目开发中需要此功能,但PHP自身无法获取服务器本机IP。想要获取服务器本机IP,有很多种方法,比如需要时我会想这2个办法,都需要调用Linux主机的shell命令来实现。这2个办法都必须使用唯一的这个函数shell_exec(''),它是返回Linux主机的shell结果的所有行,且将结果传给一个变量,再用PHP分析运行结果,从运行结果中提取出服务器的IP地址。

方法1. 免root(所有的CentOS/Ubuntu/Debian主机默认是这个状态),即Apache或Nginx不需要有root权限。程序如:
<?
$a1=shell_exec('cat /etc/hosts');
echo $a1; //此行用于测试
?>

第2行的echo $a1;是用于测试,成品中这一行是应该删除的。$a1这个变量是调用cat /etc/hosts这个shell命令,返回的结果当中,其中有一行(一般在最后一行)就是主机的IP,例如这样:
105.152.XX.XX myhostname

之后,编写一段程序让其分析出这一行,完成提取IP。

方法2. 如果给Apache或Nginx赋予了root权限,程序如:
<?
$a1=shell_exec('sudo ifconfig');
echo $a1; //此行用于测试
?>

方法2是调用ifconfig的shell命令。请注意,如果PHP想调用需要root才支持的shell命令,sudo不可省略,否则不运行

返回的结果当中,其中有一行是:
inet addr:105.152.XX.XX Bcast:105.152.XX.255 Mask:255.255.255.0

同样,编写一段程序让其分析出这一行,完成提取IP。

(注:给Apache或Nginx赋予了root权限,方法过些天会写博客,并将标题命名为“必成技术”,必成,即必定可以成功的意思。)

附:上述提到的“编写一段程序让其分析出这一行”,方法示例,
<?
$t=explode("\n",$a1);$j=count($t)-1; //将每行用回车隔开,获得每一行的数据
for ($i=0;$i<=$j;$i++){
$a=$t[$i]; //$a的变量为每一行
// 在这里分析$a,由于时间的关系这里暂不举例了,完成这部分程序的编写和调试约需要30-60分钟。
}
?>

0条评论:

发表评论:
名字: (*必填)
博客: (可省)

正文:

  记住信息?

王志勇:1980-09-26 (44周岁)
程序设计,前端设计。

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏

Blog存档 Archives

2022年07月
2022年06月(15)
2022年05月(20)
2022年04月(16)
2022年03月(9)
2022年02月(9)
2022年01月(10)
2021年 +

2020年 +
2019年 +
2018年 +
2016年-2017年(9)
2014年06月-09月(10)
2013年 +
2012年 +
2011年 +
2010年 +
2009年 +
2008年 +
2007年 +
2006年 +
2005年09月(4)

Copyright © 2006-2024 auiou.com All rights reserved.
此Blog程序由王志勇编写