PHP服务器信息探针可以检测网络流量,CPU,硬盘,内存使用情况,网站管理员必备 - Go语言中文社区

PHP服务器信息探针可以检测网络流量,CPU,硬盘,内存使用情况,网站管理员必备




<?
error_reporting(0);//抑制所有错误信息
@header("content-Type: text/html; charset=utf-8");//语言强制
ob_start();
date_default_timezone_set('Asia/Shanghai');//此句用于消除时间差
$time_start= microtime_float();
 
/**
*
*/
class ServerInfo{
    //服务器参数
    public$S = array(
        'YourIP',//你的IP
        'DomainIP',//服务器域名和IP及进程用户名
        'Flag',//服务器标识
        'OS',//服务器操作系统具体
        'Language',//服务器语言
        'Name',//服务器主机名
        'Email',//服务器管理员邮箱
        'WebEngine',//服务器WEB服务引擎
        'WebPort',//web服务端口
        'WebPath',//web路径
        'ProbePath',//本脚本所在路径
        'sTime'//服务器时间
        );
 
    public$sysInfo; //系统信息,windows和linux
    public$CPU_Use;
    public$hd = array(
        't',//硬盘总量
        'f',//可用
        'u',//已用
        'PCT',//使用率
        );
    public$NetWork = array(
        'NetWorkName',//网卡名称
        'NetOut',//出网总量
        'NetInput',//入网总量
        'OutSpeed',//出网速度
        'InputSpeed'//入网速度
        );//网卡流量
 
    function__construct(){
        $this->S['YourIP'] = @$_SERVER['REMOTE_ADDR'];
        $domain= $this->OS()?$_SERVER['SERVER_ADDR']:@gethostbyname($_SERVER['SERVER_NAME']);
        $this->S['DomainIP'] = @get_current_user().' - '.$_SERVER['SERVER_NAME'].'('.$domain.')';
        $this->S['Flag'] =empty($this->sysInfo['win_n'])?@php_uname():$this->sysInfo['win_n'];
        $os= explode(" ", php_uname());
        $oskernel= $this->OS()?$os[2]:$os[1];
        $this->S['OS'] =$os[0].'内核版本:'.$oskernel;
        $this->S['Language'] =getenv("HTTP_ACCEPT_LANGUAGE");
        $this->S['Name'] =$this->OS()?$os[1]:$os[2];
        $this->S['Email'] =$_SERVER['SERVER_ADMIN'];
        $this->S['WebEngine'] =$_SERVER['SERVER_SOFTWARE'];
        $this->S['WebPort'] =$_SERVER['SERVER_PORT'];
        $this->S['WebPath'] =$_SERVER['DOCUMENT_ROOT']?str_replace('\','/',$_SERVER['DOCUMENT_ROOT']):str_replace('\','/',dirname(__FILE__));
        $this->S['ProbePath'] =str_replace('\','/',__FILE__)?str_replace('\','/',__FILE__):$_SERVER['SCRIPT_FILENAME'];
        $this->S['sTime'] =date('Y-m-d H:i:s');
 
        $this->sysInfo =$this->GetsysInfo();
        //var_dump($this->sysInfo);
 
        $CPU1= $this->GetCPUUse();
        sleep(1);
        $CPU2= $this->GetCPUUse();
        $data= $this->GetCPUPercent($CPU1,$CPU2);
        $this->CPU_Use =$data['cpu0']['user']."%us,  ".$data['cpu0']['sys']."%sy,  ".$data['cpu0']['nice']."%ni, ".$data['cpu0']['idle']."%id,  ".$data['cpu0']['iowait']."%wa,  ".$data['cpu0']['irq']."%irq,  ".$data['cpu0']['softirq']."%softirq";
        if(!$this->OS())$this->CPU_Use ='目前只支持Linux系统';
 
        $this->hd =$this->GetDisk();
        $this->NetWork =$this->GetNetWork();
    }
    publicfunction OS(){
        returnDIRECTORY_SEPARATOR=='/'?true:false;
    }
    publicfunction GetsysInfo(){
        switch(PHP_OS) {
            case'Linux':
                $sysInfo= $this->sys_linux();
                break;
            case'FreeBSD':
                $sysInfo= $this->sys_freebsd();
                break;
            default:
                # code...
                break;
        }
        return$sysInfo;
    }
    publicfunction sys_linux(){ //linux系统探测
        $str= @file("/proc/cpuinfo");//获取CPU信息
        if(!$str)return false;
        $str= implode("",$str);
        @preg_match_all("/models+names{0,}:+s{0,}([ws)(@.-]+)([rn]+)/s",$str, $model);//CPU 名称
        @preg_match_all("/cpus+MHzs{0,}:+s{0,}([d.]+)[rn]+/",$str, $mhz);//CPU频率
        @preg_match_all("/caches+sizes{0,}:+s{0,}([d.]+s{0,}[A-Z]+[rn]+)/",$str, $cache);//CPU缓存
        @preg_match_all("/bogomipss{0,}:+s{0,}([d.]+)[rn]+/",$str, $bogomips);//
        if(is_array($model[1])){
            $cpunum= count($model[1]);
            $x1= $cpunum>1?' ×'.$cpunum:'';
            $mhz[1][0] =' | 频率:'.$mhz[1][0];
            $cache[1][0] =' | 二级缓存:'.$cache[1][0];
            $bogomips[1][0] =' | Bogomips:'.$bogomips[1][0];
            $res['cpu']['num'] = $cpunum;
            $res['cpu']['model'][] = $model[1][0].$mhz[1][0].$cache[1][0].$bogomips[1][0].$x1;
            if(is_array($res['cpu']['model']))$res['cpu']['model'] = implode("<br />", $res['cpu']['model']);
            if(is_array($res['cpu']['mhz']))$res['cpu']['mhz'] = implode("<br />", $res['cpu']['mhz']);
            if(is_array($res['cpu']['cache']))$res['cpu']['cache'] = implode("<br />", $res['cpu']['cache']);
            if(is_array($res['cpu']['bogomips']))$res['cpu']['bogomips'] = implode("<br />", $res['cpu']['bogomips']);
        }
        //服务器运行时间
        $str= @file("/proc/uptime");
        if(!$str)return false;
        $str= explode(" ", implode("",$str));
        $str= trim($str[0]);
        $min= $str/60;
        $hours= $min/60;
        $days= floor($hours/24);
        $hours= floor($hours-($days*24));
        $min= floor($min-($days*60*24)-($hours*60));
        $res['uptime'] =$days."天".$hours."小时".$min."分钟";
        //内存
        $str= @file("/proc/meminfo");
        if(!$str)return false;
        $str= implode("",$str);
        preg_match_all("/MemTotals{0,}:+s{0,}([d.]+).+?MemFrees{0,}:+s{0,}([d.]+).+?Cacheds{0,}:+s{0,}([d.]+).+?SwapTotals{0,}:+s{0,}([d.]+).+?SwapFrees{0,}:+s{0,}([d.]+)/s",$str, $buf);
        preg_match_all("/Bufferss{0,}:+s{0,}([d.]+)/s",$str, $buffers);
        $resmem['memTotal'] =round($buf[1][0]/1024, 2);
        $resmem['memFree'] =round($buf[2][0]/1024, 2);
        $resmem['memBuffers'] =round($buffers[1][0]/1024, 2);
        $resmem['memCached'] =round($buf[3][0]/1024, 2);
        $resmem['memUsed'] =$resmem['memTotal']-$resmem['memFree'];
        $resmem['memPercent'] = (floatval($resmem['memTotal'])!=0)?round($resmem['memUsed']/$resmem['memTotal']*100,2):0;
        $resmem['memRealUsed'] =$resmem['memTotal'] -$resmem['memFree'] -$resmem['memCached'] -$resmem['memBuffers'];//真实内存使用
        $resmem['memRealFree'] =$resmem['memTotal'] -$resmem['memRealUsed'];//真实空闲
        $resmem['memRealPercent'] = (floatval($resmem['memTotal'])!=0)?round($resmem['memRealUsed']/$resmem['memTotal']*100,2):0;//真实内存使用率
        $resmem['memCachedPercent'] = (floatval($resmem['memCached'])!=0)?round($resmem['memCached']/$resmem['memTotal']*100,2):0;//Cached内存使用率
        $resmem['swapTotal'] =round($buf[4][0]/1024, 2);
        $resmem['swapFree'] =round($buf[5][0]/1024, 2);
        $resmem['swapUsed'] =round($resmem['swapTotal']-$resmem['swapFree'], 2);
        $resmem['swapPercent'] = (floatval($resmem['swapTotal'])!=0)?round($resmem['swapUsed']/$resmem['swapTotal']*100,2):0;
        $resmem= $this->formatmem($resmem);//格式化内存显示单位
        $res= array_merge($res,$resmem);
        // LOAD AVG 系统负载
        $str= @file("/proc/loadavg");
        if(!$str)return false;
        $str= explode(" ", implode("",$str));
        $str= array_chunk($str, 4);
        $res['loadAvg'] = implode(" ", $str[0]);
        return$res;
    }
    publicfunction sys_freebsd(){ //freeBSD系统探测
        $res['cpu']['num']   = do_command('sysctl','hw.ncpu');//CPU
        $res['cpu']['model'] = do_command('sysctl','hw.model');
        $res['loadAvg']      = do_command('sysctl','vm.loadavg');//Load AVG  系统负载
        //uptime
        $buf= do_command('sysctl','kern.boottime');
        $buf= explode(' ',$buf);
        $sys_ticks= time()-intval($buf[3]);
        $min= $sys_ticks/60;
        $hours= $min/60;
        $days= floor($hours/24);
        $hours= floor($hours-($days*24));
        $min= floor($min-($days*60*24)-($hours*60));
        $res['uptime'] =$days.'天'.$hours.'小时'.$min.'分钟';
        //内存
        $buf= do_command('sysctl','hw.physmem');
        $resmem['memTotal'] =round($buf/1024/1024, 2);
        $str= do_command('sysctl','vm.vmtotal');
        preg_match_all("/nVirtual Memory[:s]*(Total[:s]*([d]+)K[,s]*Active[:s]*([d]+)K)n/i",$str, $buff, PREG_SET_ORDER);
        preg_match_all("/nReal Memory[:s]*(Total[:s]*([d]+)K[,s]*Active[:s]*([d]+)K)n/i",$str, $buf, PREG_SET_ORDER);
        $resmem['memRealUsed'] =round($buf[0][2]/1024, 2);
        $resmem['memCached'] =round($buff[0][2]/1024, 2);
        $resmem['memUsed'] =round($buf[0][1]/1024, 2)+$resmem['memCached'];
        $resmem['memFree'] =$resmem['memTotal']-$resmem['memUsed'];
        $resmem['memPercent'] = (floatval($resmem['memTotal'])!=0)?round($resmem['memUsed']/$resmem['memTotal']*100,2):0;
        $resmem['memRealPercent'] = (floatval($resmem['memTotal'])!=0)?round($resmem['memRealUsed']/$resmem['memTotal']*100,2):0;
        $resmem= $this->formatmem($resmem);
        $res= array_merge($res,$resmem);
        return$res;
    }
    publicfunction do_command($cName,$args
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/shaobingj126/article/details/49862885
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 10:45:51
  • 阅读 ( 1002 )
  • 分类:研发管理

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢