神雕大神的NAS主页有一段PHP代码是用来获取服务器IP地址的,目的就是为了服务器IP地址改变的时候,不用去修改html文件,自动识别IP地址。当然,是内网的。
代码是这样写的:
<?php
$lanip=shell_exec("ifconfig eth0 | grep '\<inet\>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
?>
这段代码的意思是lanip通过=号后面的命令进行获取。然后在需要填IP地址的地方用下面的代码调用就行了:
<?php echo $lanip ?>
之前我把神雕大神的NAS主页直接复制到我的CentOS中,但是无法成功获得IP地址。经过一番冥思苦想发现有几个问题。
第一个问题就是,代码中的eth0代表网卡,而我的网卡名称并不是eth0,而是enp2s0这样的名称。
第二个问题就是,ifconfig这个命令需要root权限才能执行,而宝塔面板安装的nginx和php执行权限是www,并没有root权限。
把代码中的eth0修改成enp2s0还是很简单,至于修改www的执行权限就需要修改系统配置。
度娘一番,查到了相关的资料。
使用下面的命令修改用户和用户组执行命令的权限:
visudo #修改/etc/sudoers的内容
通过visudo可以修改配置文件,找到配置文件中下面的内容:
## Allow root to run any commands anywhere root ALL=(ALL) ALL
在后面把www用户添加进去,变成这样:
## Allow root to run any commands anywhere root ALL=(ALL) ALL www ALL=(ALL) ALL
再找到下面的内容:
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
修改成这样:
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL %www ALL=(ALL) ALL
这是修改用户组的权限。
再找到下面的内容:
## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
这一段的意思是执行sudo权限命令时不需要输入密码。把这一段修改成这样:
## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL %www ALL=(ALL) NOPASSWD: ALL
保存退出,重启一下nginx和php-fpm服务。还是无法成功获取IP,于是在代码中加上sudo,最终变成下面的样子:
<?php
$lanip=shell_exec("sudo ifconfig enp2s0 | grep '\<inet\>'| grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1' 2>&1");
?>
终于成功的获取到IP地址了。
