PHP cli獲取當前服務器ip地址

網上很多用法都試過,不行的。
有的用ifconfig,但是有的Linux系統默認是不安裝ifconfig的,但是ip a是有的。下面我們用ip a來獲取服務器ip地址

  1. 命令
ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp9s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d4:3d:7e:75:99:1c brd ff:ff:ff:ff:ff:ff
    inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
       valid_lft forever preferred_lft forever
    inet6 fe80::48ea:700d:7747:1faa/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d4:3d:7e:75:99:1d brd ff:ff:ff:ff:ff:ff

  1. 網口各不相同,不能過濾網口,ip所在行有共同字段 inet,通過inet獲取各行
ip a | grep 'inet'

    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
    inet6 fe80::48ea:700d:7747:1faa/64 scope link noprefixroute 
    inet6 fe80::afea:d3ad:ee20:3b82/64 scope link noprefixroute 

  1. 上面發現了多行,實際上我們只需要 100.200.30.81,過濾inet6
ip a | grep 'inet' | grep -v inet6

    inet 127.0.0.1/8 scope host lo
    inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0

  1. 127.0.0.1很明顯不是我們想要的,過濾掉
ip a | grep 'inet' | grep -v inet6 | grep -v 127*

inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
  1. 我們只需要ip,不需要其他多餘字符,ip在字段中有兩個地方展示:
    inet 100.200.30.81/27 表示ipv4地址
    brd 100.200.30.81 表示廣播地址
    這裏我們要的是ipv4地址
ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'

100.200.30.81/27
  1. 只想要 ip
ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'

100.200.30.81

最終獲取ip通用命令:

ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'

php 調用shell執行,獲取ip地址返回:

$serverIP = exec("ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'");

封裝方法:

function getServerIp(){
	return exec("ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章