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

`
image
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("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s",$str, $model);//CPU 名称
        @preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/",$str, $mhz);//CPU频率
        @preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/",$str, $cache);//CPU缓存
        @preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/",$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("
", $res['cpu']['model']); if(is_array($res['cpu']['mhz']))$res['cpu']['mhz'] = implode("
", $res['cpu']['mhz']); if(is_array($res['cpu']['cache']))$res['cpu']['cache'] = implode("
", $res['cpu']['cache']); if(is_array($res['cpu']['bogomips']))$res['cpu']['bogomips'] = implode("
", $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("/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); $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){ //执行系统命令FreeBSD $cName= empty($cName)?'sysctl':timr($cName); if(empty($args))return false; $args= '-n '.$args; $buffers= ''; $command= find_command($cName); if(!$command)return false; if($fp= @popen("$command $args",'r')){ while(!@feof($fp)) { $buffers.= @fgets($fp, 4096); } pclose($fp); returntrim($buffers); } returnfalse; } publicfunction find_command($cName){//确定shell位置 $path= array('/bin','/sbin', '/usr/bin','/usr/sbin', '/usr/local/bin', '/usr/local/sbin'); foreach($pathas $p) { if(@is_executable("$p/$commandName"))return "$p/$commandName"; } returnfalse; } publicfunction GetCPUUse(){ $data= @file('/proc/stat'); $cores= array(); foreach($data as $line) { if(preg_match('/^cpu[0-9]/',$line)){ $info= explode(' ',$line); $cores[]=array('user'=>$info[1],'nice'=>$info[2],'sys'=> $info[3],'idle'=>$info[4],'iowait'=>$info[5],'irq'=> $info[6],'softirq'=> $info[7]); } } return$cores; } publicfunction GetCPUPercent($CPU1,$CPU2){ $num= count($CPU1); if($num!==count($CPU2))return; $cups= array(); for($i=0;$i < $num;$i++) { $dif= array(); $dif['user'] =$CPU2[$i]['user'] -$CPU1[$i]['user']; $dif['nice'] =$CPU2[$i]['nice'] -$CPU1[$i]['nice']; $dif['sys'] =$CPU2[$i]['sys'] -$CPU1[$i]['sys']; $dif['idle'] =$CPU2[$i]['idle'] -$CPU1[$i]['idle']; $dif['iowait'] =$CPU2[$i]['iowait'] -$CPU1[$i]['iowait']; $dif['irq'] =$CPU2[$i]['irq'] -$CPU1[$i]['irq']; $dif['softirq'] =$CPU2[$i]['softirq'] -$CPU1[$i]['softirq']; $total= array_sum($dif); $cpu= array(); foreach($difas $x=>$y) $cpu[$x] =round($y/$total*100, 2); $cpus['cpu'.$i] = $cpu; } return$cpus; } publicfunction GetDisk(){ //获取硬盘情况 $d['t'] =round(@disk_total_space(".")/(1024*1024*1024),3); $d['f'] =round(@disk_free_space(".")/(1024*1024*1024),3); $d['u'] =$d['t']-$d['f']; $d['PCT'] = (floatval($d['t'])!=0)?round($d['u']/$d['t']*100,2):0; return$d; } privatefunction formatmem($mem){//格试化内存显示单位 if(!is_array($mem))return $mem; $tmp= array( 'memTotal','memUsed', 'memFree', 'memPercent', 'memCached','memRealPercent', 'swapTotal','swapUsed', 'swapFree', 'swapPercent' ); foreach($mem as $k=>$v) { if(!strpos($k,'Percent')){ $v= $v<1024?$v.' M':$v.' G'; } $mem[$k] =$v; } foreach($tmp as $v) { $mem[$v] =$mem[$v]?$mem[$v]:0; } return$mem; } publicfunction GetNetWork(){ //网卡流量 $strs= @file("/proc/net/dev"); $lines= count($strs); for($i=2;$i < $lines;$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 ); $res['OutSpeed'][$i] = $info[10][0]; $res['InputSpeed'][$i] = $info[2][0]; $res['NetOut'][$i] = $this->formatsize($info[10][0]); $res['NetInput'][$i] = $this->formatsize($info[2][0]); $res['NetWorkName'][$i] = $info[1][0]; } return$res; } publicfunction 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;} } for($l= $i-1;$l >=0; $l--) { $allsize1[$l]=floor($size/pow(1024,$l)); $allsize[$l]=$allsize1[$l]-$allsize1[$l+1]*1024; } $len=count($allsize); for($j= $len-1;$j >=0; $j--) { $fsize=$fsize.$allsize[$j].$danwei[$j]; } return$fsize; } publicfunction phpexts(){ //以编译模块 $able= get_loaded_extensions(); $str= ''; foreach($able as $key => $value) { if($key!=0 &&$key%13==0) { $str.= '
'; } $str.= "$value  "; } return$str; } publicfunction show($varName){//检测PHP设置参数 switch($result= get_cfg_var($varName)){ case0: return'×'; break; case1: return''; break; default: return$result; break; } } publicfunction GetDisFuns(){ $disFuns=get_cfg_var("disable_functions"); $str= ''; if(empty($disFuns)){ $str= '×'; }else{ $disFunsarr= explode(',',$disFuns); foreach($disFunsarr as $key=>$value) { if($key!=0 &&$key%8==0) { $str.= '
'; } $str.= "$value  "; } } return$str; } publicfunction isfun($funName='',$j=0){// 检测函数支持 if(!$funName || trim($funName) =='' || preg_match('~[^a-z0-9\_]+~i',$funName, $tmp)) return'错误'; if(!$j){ return(function_exists($funName) !== false) ?'' : '×'; }else{ return(function_exists($funName) !== false) ?'√' : '×'; } } publicfunction GetGDVer(){ $strgd= '×'; if(function_exists(gd_info)) { $gd_info= @gd_info(); $strgd= $gd_info["GD Version"]; } return$strgd; } publicfunction GetZendInfo(){ $zendInfo= array(); $zendInfo['ver'] = zend_version()?zend_version():'×'; $phpv= substr(PHP_VERSION,2,1); $zendInfo['loader'] =$phpv>2?'ZendGuardLoader[启用]':'Zend Optimizer'; if($phpv>2){ $zendInfo['html'] = get_cfg_var("zend_loader.enable")?'':'×'; }elseif(function_exists('zend_optimizer_version')){ $zendInfo['html'] = zend_optimizer_version(); }else{ $zendInfo['html']= (get_cfg_var("zend_optimizer.optimization_level") || get_cfg_var("zend_extension_manager.optimizer_ts") || get_cfg_var("zend.ze1_compatibility_mode") || get_cfg_var("zend_extension_ts"))?'':'×'; } return$zendInfo; } publicfunction GetIconcube(){ $str= '×'; if(extension_loaded('ionCube Loader')){ $ys= ionCube_Loader_version(); $gm= '.'.(int)substr($ys, 3, 2); $str= $ys.$gm; } return$str; } publicfunction CHKModule($cName){ if(empty($cName))return '错误'; $str= phpversion($cName); returnempty($str)?'×':$str; } publicfunction GetDBVer($dbname){ if(empty($dbname))return '错误'; switch($dbname) { case'mysql': if(function_exists("mysql_get_server_info")){ $s= @mysql_get_server_info(); $s= $s ? '  mysql_server 版本:'.$s:''; $c= @mysql_get_client_info(); $c= $c ? '  mysql_client 版本:'.$c:''; return$s.$c; } return''; break; case'sqlite': if(extension_loaded('sqlite3')){ $sqliteVer= SQLite3::version(); $str= ''; $str.= 'SQLite3 Ver'.$sqliteVer['versionString']; }else{ $str= $this->isfun('sqlite_close'); if(strpos($str,'√')!==false){ $str.= '  版本:'.sqlite_libversion(); } } return$str; break; default: return''; break; } } }
$title= 'PHP服务器信息探针';
$j_version= '1.0.0';
$S = new ServerInfo();
$phpSelf= $_SERVER['PHP_SELF'] ?$_SERVER['PHP_SELF'] :$_SERVER['SCRIPT_NAME'];
$disFuns=get_cfg_var("disable_functions");
$disFuns= strpos('phpinfo', needle)?'×':"PHPINFO";
$strcookies= isset($_COOKIE)?'': '×';
$strsmtp= get_cfg_var("SMTP")?'': '×';
$smtpadd= get_cfg_var("SMTP")?get_cfg_var("SMTP"):'×';

你可能感兴趣的:(PHP服务器信息探针可以检测网络流量,CPU,硬盘,内存使用情况,网站管理员必备)