", $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; } }