一个可以获取linux 系统硬件相关信息的类

<?php 

class CServerInfo
{

    static public function getCpuData($speed = 0.5)
    {

        if (false === ($prevVal = @file("/proc/stat"))) return false;
        $prevVal = implode($prevVal, PHP_EOL);
        $prevArr = explode(‘ ‘, trim($prevVal));
        $prevTotal = $prevArr[2] + $prevArr[3] + $prevArr[4] + $prevArr[5];
        $prevIdle = $prevArr[5];
        usleep($speed * 1000000);
        $val = @file("/proc/stat");
        $val = implode($val, PHP_EOL);
        $arr = explode(‘ ‘, trim($val));
        $total = $arr[2] + $arr[3] + $arr[4] + $arr[5];
        $idle = $arr[5];
        $intervalTotal = intval($total - $prevTotal);
        return round(100 * (($intervalTotal - ($idle - $prevIdle)) / $intervalTotal),2);
    }

    /**
     * Cpu相关信息
     * @return array|bool
     */
    static public function getCpuInfoData()
    {
        if (false === ($str = @file("/proc/cpuinfo"))) return false;
        $str = implode("", $str);
        @preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model);
        @preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $mhz);
        @preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/", $str, $cache);
        @preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $bogomips);
        $res = array();
        if (false !== is_array($model[1])) {
            $res[‘cpu‘][‘num‘] = sizeof($model[1]);
            if ($res[‘cpu‘][‘num‘] == 1)
                $x1 = ‘‘;
            else
                $x1 = ‘ &times;‘ . $res[‘cpu‘][‘num‘];
            $res[‘cpu‘][‘mhz‘] = $mhz[1][0];
            $mhz[1][0] = ‘ <br />   频率:‘ . $mhz[1][0];
            $res[‘cpu‘][‘cache‘] = $cache[1][0];
            $cache[1][0] = ‘ <br />   二级缓存:‘ . $cache[1][0];
            $res[‘cpu‘][‘bogomips‘] = $bogomips[1][0];
            $bogomips[1][0] = ‘ <br />  Bogomips:‘ . $bogomips[1][0];
            $res[‘cpu‘][‘model‘][] = $model[1][0] . $mhz[1][0] . $cache[1][0] . $bogomips[1][0] . $x1;
            if (false !== is_array($res[‘cpu‘][‘model‘])) $res[‘cpu‘][‘model‘] = implode("<br />", $res[‘cpu‘][‘model‘]);
            if (false !== is_array($res[‘cpu‘][‘mhz‘])) $res[‘cpu‘][‘mhz‘] = implode("<br />", $res[‘cpu‘][‘mhz‘]);
            if (false !== is_array($res[‘cpu‘][‘cache‘])) $res[‘cpu‘][‘cache‘] = implode("<br />", $res[‘cpu‘][‘cache‘]);
            if (false !== is_array($res[‘cpu‘][‘bogomips‘])) $res[‘cpu‘][‘bogomips‘] = implode("<br />", $res[‘cpu‘][‘bogomips‘]);
        }
        return $res;
    }

    /**
     * 内存相关数据
     * 单位为B
     * @return array|bool
     */
    static public function getMenData()
    {
        if (false === ($str = @file("/proc/meminfo"))) return false;
        $str = implode("", $str);
        preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf);
        preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers);
        $res = array();
        $res[‘memTotal‘] = round($buf[1][0] / 1024, 2);
        $res[‘memFree‘] = round($buf[2][0] / 1024, 2);
        $res[‘memBuffers‘] = round($buffers[1][0] / 1024, 2);
        $res[‘memCached‘] = round($buf[3][0] / 1024, 2);
        $res[‘memUsed‘] = $res[‘memTotal‘] - $res[‘memFree‘];
        $res[‘memPercent‘] = (floatval($res[‘memTotal‘]) != 0) ? round($res[‘memUsed‘] / $res[‘memTotal‘] * 100, 2) : 0;

        $res[‘memRealUsed‘] = $res[‘memTotal‘] - $res[‘memFree‘] - $res[‘memCached‘] - $res[‘memBuffers‘]; //真实内存使用
        $res[‘memRealFree‘] = $res[‘memTotal‘] - $res[‘memRealUsed‘]; //真实空闲
        $res[‘memRealPercent‘] = (floatval($res[‘memTotal‘]) != 0) ? round($res[‘memRealUsed‘] / $res[‘memTotal‘] * 100, 2) : 0; //真实内存使用率

        $res[‘memCachedPercent‘] = (floatval($res[‘memCached‘]) != 0) ? round($res[‘memCached‘] / $res[‘memTotal‘] * 100, 2) : 0; //Cached内存使用率

        $res[‘swapTotal‘] = round($buf[4][0] / 1024, 2);
        $res[‘swapFree‘] = round($buf[5][0] / 1024, 2);
        $res[‘swapUsed‘] = round($res[‘swapTotal‘] - $res[‘swapFree‘], 2);
        $res[‘swapPercent‘] = (floatval($res[‘swapTotal‘]) != 0) ? round($res[‘swapUsed‘] / $res[‘swapTotal‘] * 100, 2) : 0;

        //判断内存如果小于1G,就显示M,否则显示G单位

        if ($res[‘memTotal‘] < 1024) {
            $memTotal = $res[‘memTotal‘] . " M";
            $mt = $res[‘memTotal‘] . " M";
            $mu = $res[‘memUsed‘] . " M";
            $mf = $res[‘memFree‘] . " M";
            $mc = $res[‘memCached‘] . " M"; //cache化内存
            $mb = $res[‘memBuffers‘] . " M"; //缓冲
            $st = $res[‘swapTotal‘] . " M";
            $su = $res[‘swapUsed‘] . " M";
            $sf = $res[‘swapFree‘] . " M";
            $swapPercent = $res[‘swapPercent‘];
            $memRealUsed = $res[‘memRealUsed‘] . " M"; //真实内存使用
            $memRealFree = $res[‘memRealFree‘] . " M"; //真实内存空闲
            $memRealPercent = $res[‘memRealPercent‘]; //真实内存使用比率
            $memPercent = $res[‘memPercent‘]; //内存总使用率
            $memCachedPercent = $res[‘memCachedPercent‘]; //cache内存使用率
        } else {
            $memTotal = round($res[‘memTotal‘] / 1024, 3) . " G";
            $mt = round($res[‘memTotal‘] / 1024, 3) . " G";
            $mu = round($res[‘memUsed‘] / 1024, 3) . " G";
            $mf = round($res[‘memFree‘] / 1024, 3) . " G";
            $mc = round($res[‘memCached‘] / 1024, 3) . " G";
            $mb = round($res[‘memBuffers‘] / 1024, 3) . " G";
            $st = round($res[‘swapTotal‘] / 1024, 3) . " G";
            $su = round($res[‘swapUsed‘] / 1024, 3) . " G";
            $sf = round($res[‘swapFree‘] / 1024, 3) . " G";
            $swapPercent = $res[‘swapPercent‘];
            $memRealUsed = round($res[‘memRealUsed‘] / 1024, 3) . " G"; //真实内存使用
            $memRealFree = round($res[‘memRealFree‘] / 1024, 3) . " G"; //真实内存空闲
            $memRealPercent = $res[‘memRealPercent‘]; //真实内存使用比率
            $memPercent = $res[‘memPercent‘]; //内存总使用率
            $memCachedPercent = $res[‘memCachedPercent‘]; //cache内存使用率
        }

        $res[‘u_memTotal‘] = $memTotal;
        $res[‘u_memTotal‘] = $mt;
        $res[‘u_memUsed‘] = $mu;
        $res[‘u_memFree‘] = $mf;
        $res[‘u_memCached‘] = $mc; //cache化内存
        $res[‘u_memBuffers‘] = $mb; //缓冲
        $res[‘u_swapTotal‘] = $st;
        $res[‘u_swapUsed‘] = $su;
        $res[‘u_swapFree‘] = $sf;
        $res[‘u_swapPercent‘] = $swapPercent;
        $res[‘u_memRealUsed‘] = $memRealUsed; //真实内存使用
        $res[‘u_memRealFree‘] = $memRealFree; //真实内存空闲
        $res[‘u_memRealPercent‘] = $memRealPercent; //真实内存使用比率
        $res[‘u_memPercent‘] = $memPercent; //内存总使用率
        $res[‘u_memCachedPercent‘] = $memCachedPercent; //cache内存使用率
        return $res;
    }

    /**
     * 硬盘情况
     * @return array
     */
    static public function getDiskData()
    {
        $iTotal = round(@disk_total_space(".") / (1024 * 1024 * 1024), 3); //总
        $iUsableness = round(@disk_free_space(".") / (1024 * 1024 * 1024), 3); //可用
        $iImpropriate = $iTotal - $iUsableness; //已用
        $iPercent = (floatval($iTotal) != 0) ? round($iImpropriate / $iTotal * 100, 2) : 0;
        $sDesc = ‘‘;
        if($iPercent>85){
            $sDesc ="<span style=‘color: #f40‘>磁盘空间不多了,建议近期清理一下日志</span>";
        }
        if($iPercent>95){
            $sDesc ="<span style=‘color: #f40‘>磁盘空间快满了,可能会影响审计系统正常使用,建议立即清理日志</span>";
        }

        return array(
            ‘iTotal‘ => $iTotal,
            ‘iUsableness‘ => $iUsableness,
            ‘iImpropriate‘ => $iImpropriate,
            ‘iPercent‘ => $iPercent,
            ‘sDesc‘ => $sDesc,
        );
    }

    /**
     * 网接相关流量信息
     */
    static public function getInterfaceData()
    {

        //mii-tool
        $strs = @file("/proc/net/dev");

        for ($i = 2; $i < count($strs); $i++) {
            preg_match_all("/([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/", $strs[$i], $info);
            $NetOutSpeed[$i] = $info[10][0]; //入网实时
            $NetInputSpeed[$i] = $info[2][0]; //出网实时
            $NetInput[$i] = self::formatsize($info[2][0]); //入网流量
            $NetOut[$i] = self::formatsize($info[10][0]); //出网流量
        }
    }

    /**
     * 单位自动转换
     * @param $size
     * @return string
     */
    static public function formatSize($size)
    {
        $danwei = array(‘ B ‘, ‘ K ‘, ‘ M ‘, ‘ G ‘, ‘ T ‘);
        $allsize = array();
        $i = 0;

        for ($i = 0; $i < 5; $i++) {
            if (floor($size / pow(1024, $i)) == 0) {
                break;
            }
        }
        $allsize1 = array();
        for ($l = $i - 1; $l >= 0; $l--) {
            $allsize1[$l] = floor($size / pow(1024, $l));
            if (isset($allsize1[$l + 1])) {

                $allsize[$l] = $allsize1[$l] - $allsize1[$l + 1] * 1024;
            }
        }

        $len = count($allsize);
        $fsize = "";
        for ($j = $len - 1; $j >= 0; $j--) {
            $fsize = $fsize . $allsize[$j] . $danwei[$j];
        }
        return $fsize;
    }
}

?>
时间: 2024-07-29 15:16:26

一个可以获取linux 系统硬件相关信息的类的相关文章

Inxi:获取Linux系统和硬件信息的神器

导读 在这篇文章里,我们将看到如何使用inxi来获取这些详情信息.在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息. Inxi是一个可以获取完整的系统和硬件详情信息的命令行工具,内容包括: 硬件 CPU 磁盘驱动器 Xorg 桌面环境 内核 GCC版本 进程 内存占用 和其他有用的信息 安装方法 Inxi在多数现代GNU/Linux操作系统的默认软件仓库中.所以,我们可以简单地运行下列命令安装. 在基于Debian的发行版: sudo apt-get install inx

C/C++通过WMI和系统API函数获取获取系统硬件配置信息

转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/article/details/5548656 转载:http://blog.csdn.net/dongdan_002/article/details/42460343 头文件WMIInfo.h 1 /*****************************************************

Linux系统硬件信息

对于linux系统硬件信息的查看,主要针对cpu.memory.disk,以及网卡,每一种硬件的信息通常会有多种查看方法. 1.cpu 查看/proc/cpuinfo文件 可查看cpu的详细信息. [[email protected]_server ~]# cat /proc/cpuinfo  vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Xeon(TM) CPU 2.80GHz stepping

UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Github: https://github.com/validvoid/UWP-SystemInfoCollector 由于涉及内容较多,故本文会分为多篇展开.本篇介绍获取设备和系统的基本信息.应用包信息.用户数据账户信息和用户账户信息. 原博客阅读地址:http://validvoid.net/uwp-

Linux系统的相关知识、常用命令及centos 7网卡配置

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途(括号内为举例存放的文件) /  根目录 cd /  切换到根目录 / bin  存放可执行文件 /dev  存放设备文件  (网卡 CPU) /media  存放可移除设备文件   (U盘 CD/DVD  VMTools) /opt  存放第三方软件的默认位置 /tmp  存放临时文件  (日志文件) /root  root用户的家目录,主

Linux系统的相关知识、常用命令及拓展、centos 7网卡配置

一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途 目录 功能 /bin 存放可执行文件 /dev 存放设备文件 (如:网卡.CPU) /media 存放可移除设备文件 (如:U盘.CD/DVD.VMTools) /opt 存放第三方软件的默认位置 /tmp  存放临时文件 (如:日志文件) /root root用户的家目录,主文件夹 /home 普通用户的家目录,文件夹的命名是以用户的名字来命名的 /etc 存放配置文件 /usr 存放操作系统软件资源 /var 存放

linux内核分析 第三周 构造一个简单的Linux系统MenuOS

一.计算机的三个法宝 存储程序计算机,函数调用堆栈,中断二.操作系统的两把剑:1.中断上下文的切换,保存现场和恢复现场2.进程上下文的切换. 三.linux内核源代码的分析: ·arch/目录保存支持多种CPU类型的源代码,重点是x86·init目录:含有main.c,内核启动相关的代码基本都在init目录下·ipc目录:进程间的通信·kernel目录:有Linux内核的核心代码.四.构造一个简单的Linux系统 使用实验楼的虚拟机打开shell 1.cd LinuxKernel/2.qemu

作业3:构造一个简单的Linux系统MenuOS 20135115臧文君

构造一个简单的Linux系统MenuOS 注:作者:臧文君,原创作品转载请注明出处,<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内核源代码介绍 1.根目录 arch/x86目录下的代码是我们重点关注的,arch中包括支持不同CPU的源代码. init目录下包含内核启动相关的代码,如main.c(start_kernel函数相当于普通C程序的main函数,是Linux内核初始化的起点). ipc

《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS

[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK THREE(2.29——3.6)构造一个简单的Linux系统MenuOS SECTION 1 Linux内核源代码简介 1.操作系统的两把宝剑(回顾上一讲) 中断上下文的切换——保存现场&恢复现场 进程上下文的切换 2.Linux内核源代码简介 打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的