php服务器探针源码,PHP服务器探针的实现代码

本文主要和大家分享PHP服务器探针的实现代码,文章有点长,希望能帮助到大家。<?phperror_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();

} public function OS(){

return DIRECTORY_SEPARATOR=='/'?true:false;

} public function GetsysInfo(){

switch (PHP_OS) { case 'Linux': $sysInfo = $this->sys_linux(); break; case 'FreeBSD': $sysInfo = $this->sys_freebsd(); break; default: # code...

break;

} return $sysInfo;

} public function 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;

} public function 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\@.-]+)([\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; } public function 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]+)KTotal[\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;

} public function 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);

}

pclos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SkyWalking PHP探针是一种用于监控和诊断PHP应用程序性能的工具。它是Apache SkyWalking社区开发的一个开项目,旨在帮助开发人员实时跟踪应用程序的性能指标,优化代码和改善用户体验。 使用SkyWalking PHP探针,开发人员可以监控应用程序的响应时间、吞吐量、错误率等关键指标。探针会通过收集和分析HTTP请求以及与相关的业务层交互,提供详细的性能报告和跟踪信息。这些报告和信息可以帮助开发人员识别潜在的性能瓶颈和问题,并提供相应的优化建议。 SkyWalking PHP探针的安装和配置相对简单,可以与主流的PHP框架和应用程序无缝集成。探针提供了各种插件和扩展,支持与其他监控系统集成,如Prometheus、Grafana等。此外,SkyWalking PHP探针还支持分布式跟踪,可以帮助开发人员进行跨进程和跨服务的性能追踪和调试。 通过使用SkyWalking PHP探针,开发人员可以及时发现和解决应用程序中的性能问题,提高应用程序的性能和可靠性。它可以帮助开发人员更好地理解和监控应用程序的运行状况,并及时采取相应的措施来优化和改进应用程序的性能。 总而言之,SkyWalking PHP探针是一个功能强大的工具,可帮助开发人员监控和优化PHP应用程序的性能。它提供了丰富的性能指标和跟踪信息,帮助开发人员快速发现和解决性能问题,提高应用程序的质量和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值