", $res['cpu']['model']);
}
if (false !== is_array($res['cpu']['mhz'])) {
$res['cpu']['mhz'] = implode("
", $res['cpu']['mhz']);
}
if (false !== is_array($res['cpu']['cache'])) {
$res['cpu']['cache'] = implode("
", $res['cpu']['cache']);
}
if (false !== is_array($res['cpu']['bogomips'])) {
$res['cpu']['bogomips'] = implode("
", $res['cpu']['bogomips']);
}
}
// NETWORK
// UPTIME
if (false === ($str = @file("/proc/uptime"))) {
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));
if ($days !== 0) {
$res['uptime'] = $days . "天";
}
if ($hours !== 0) {
$res['uptime'] .= $hours . "小时";
}
$res['uptime'] .= $min . "分钟";
// MEMORY
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['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;
// LOAD AVG
if (false === ($str = @file("/proc/loadavg"))) {
return false;
}
$str = explode(" ", implode("", $str));
$str = array_chunk($str, 4);
$res['loadAvg'] = implode(" ", $str[0]);
return $res;
}
//FreeBSD系统探测
public function sys_freebsd()
{
//CPU
if (false === ($res['cpu']['num'] = self::get_key("hw.ncpu"))) {
return false;
}
$res['cpu']['model'] = self::get_key("hw.model");
//LOAD AVG
if (false === ($res['loadAvg'] = self::get_key("vm.loadavg"))) {
return false;
}
//UPTIME
if (false === ($buf = self::get_key("kern.boottime"))) {
return false;
}
$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));
if ($days !== 0) {
$res['uptime'] = $days . "天";
}
if ($hours !== 0) {
$res['uptime'] .= $hours . "小时";
}
$res['uptime'] .= $min . "分钟";
//MEMORY
if (false === ($buf = self::get_key("hw.physmem"))) {
return false;
}
$res['memTotal'] = round($buf / 1024 / 1024, 2);
$str = self::get_key("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);
$res['memRealUsed'] = round($buf[0][2] / 1024, 2);
$res['memCached'] = round($buff[0][2] / 1024, 2);
$res['memUsed'] = round($buf[0][1] / 1024, 2) + $res['memCached'];
$res['memFree'] = $res['memTotal'] - $res['memUsed'];
$res['memPercent'] = (floatval($res['memTotal']) != 0) ? round($res['memUsed'] / $res['memTotal'] * 100, 2) : 0;
$res['memRealPercent'] = (floatval($res['memTotal']) != 0) ? round($res['memRealUsed'] / $res['memTotal'] * 100, 2) : 0;
return $res;
}
//取得参数值 FreeBSD
private function get_key($keyName)
{
return self::do_command('sysctl', "-n $keyName");
}
//确定执行文件位置 FreeBSD
private function find_command($commandName)
{
$path = array('/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin');
foreach ($path as $p) {
if (@is_executable("$p/$commandName")) {
return "$p/$commandName";
}
}
return false;
}
//执行系统命令 FreeBSD
private function do_command($commandName, $args)
{
$buffer = "";
if (false === ($command = self::find_command($commandName))) {
return false;
}
if ($fp = @popen("$command $args", 'r')) {
while (! @feof($fp)) {
$buffer .= @fgets($fp, 4096);
}
return trim($buffer);
}
return false;
}
private function GetWMI($wmi, $strClass, $strValue = array())
{
$arrData = array();
$objWEBM = $wmi->Get($strClass);
$arrProp = $objWEBM->Properties_;
$arrWEBMCol = $objWEBM->Instances_();
foreach ($arrWEBMCol as $objItem) {
@reset($arrProp);
$arrInstance = array();
foreach ($arrProp as $propItem) {
eval("\$value = \$objItem->" . $propItem->Name . ";");
if (empty($strValue)) {
$arrInstance[$propItem->Name] = trim($value);
} else {
if (in_array($propItem->Name, $strValue)) {
$arrInstance[$propItem->Name] = trim($value);
}
}
}
$arrData[] = $arrInstance;
}
return $arrData;
}
}