Linux 下PHP获取服务器状态CPU、MEM使用率、磁盘使用率、IP地址获取、MAC地址获取等信息记录

时间:2022-02-01 15:44:56

获取服务器状态记录使用的是SHELL命令方式进行获取输出结果  然后进行字符串拆分处理等方式进行获取到自己有用信息

贴出获取方式以及常用处理方式

<?PHP
$fp = popen('执行SHELL命令', "r");
$rs = '';
while(!feof($fp)){
$rs .= fread($fp, 1024);
}
pclose($fp);
//获取到输出结果 rs
$info = explode("\n", $rs); //处理方式1 换行拆分
$info2 = explode(",", $info[0]); //处理方式2 逗号拆分
$info3 = trim($info2[0], '%Cpu(s)'); // 处理方式3 去掉左右字符串
$info4 = preg_replace('/\s{2,}/', $rs); //处理方式4 字符串替换 //根据自己需要的信息不同进行处理 组合处理

处理命令列表记录

//获取CPU使用率以及内存使用率
$fp = popen('top -b -n 2 | grep -E "(Cpu\(s\))|(KiB Mem)"', "r");
/*说明: 获取两次信息,因为只获取一次数据不准确,但是造成返回缓慢,建议做成异步处理
处理方式
$sys_info = explode("\n", $rs);
$cpu_info = explode(",", $sys_info[2]);
$cpu_usage = trim(trim($cpu_info[0], '%Cpu(s): '), 'us'); //百分比 $mem_info = explode(",", $sys_info[3]); //内存占有量 数组
$mem_total = trim(trim($mem_info[0], 'KiB Mem : '), ' total');
$mem_used = trim(trim($mem_info[2], 'used'));
$mem_usage = round(100 * intval($mem_used) / intval($mem_total), 2); //百分比
*/
//获取磁盘占用率
$fp = popen('df -lh | grep -E "^(/)"', "r");
$rs = fread($fp, 1024);
pclose($fp);
$rs = preg_replace('/\s{2,}/', ' ', $rs); //把多个空格换成 “_”
$hd = explode(" ", $rs); $hd_avail = trim($hd[3], 'G'); //磁盘可用空间大小 单位G
$hd_usage = trim($hd[4], '%'); //挂载点 百分比
//获取MAC地址
$fp = popen('lshw -c network | grep serial | head -n 1', "r");
$rs = fread($fp, 1024);
pclose($fp);
$mac = explode(':', $rs);
array_shift($mac);
$macAddr = implode(':', $mac); //XX:XX:XX:XX:XX
//获取内网IP地址
$fp = popen('ip addr | grep inet | grep -v inet6', "r"); /**
结果展示: 自己处理
inet 192.168.1.180/24 brd 192.168.1.255 scope global dynamic
inet 172.20.175.225/28 brd 172.20.175.239 scope global dynamic
inet 127.0.0.1/8 brd 127.255.255.255 scope global dynamic
**/