php windows系统探测程序
function do_command($commandName, $args) {
$buffer = "";
if (false === ($command = find_command($commandName))) return false;
if ($fp = @popen("$command $args", 'r')) {
while (!@feof($fp)){
$buffer .= @fgets($fp, 4096);
}
return trim($buffer);
}
return false;
}
//windows系统探测
function sys_windows() {
$objLocator = new COM("WbemScripting.SWbemLocator");
$wmi = $objLocator->ConnectServer();
$prop = $wmi->get("Win32_PnPEntity");
//CPU
$cpuinfo = GetWMI($wmi,"Win32_Processor", array("Name","L2CacheSize","NumberOfCores"));
$res['cpu']['num'] = $cpuinfo[0]['NumberOfCores'];
if (null == $res['cpu']['num']) {
$res['cpu']['num'] = 1;
}
for ($i=0;$i<$res['cpu']['num'];$i++){
$res['cpu']['model'] .= $cpuinfo[0]['Name']."<br>";
$res['cpu']['cache'] .= $cpuinfo[0]['L2CacheSize']."<br>";
}
// SYSINFO
$sysinfo = GetWMI($wmi,"Win32_OperatingSystem", array('LastBootUpTime','TotalVisibleMemorySize','FreePhysicalMemory','Caption','CSDVersion','SerialNumber','InstallDate'));
$res['win_n'] = $sysinfo[0]['Caption']." ".$sysinfo[0]['CSDVersion']." <b>序列号</b>:{$sysinfo[0]['SerialNumber']} 于".date('Y年m月d日H:i:s',strtotime(substr($sysinfo[0]['InstallDate'],0,14)))."安装";
//UPTIME
$res['uptime'] = $sysinfo[0]['LastBootUpTime'];
$sys_ticks = 3600*8 + time() - strtotime(substr($res['uptime'],0,14));
$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
$res['memTotal'] = $sysinfo[0]['TotalVisibleMemorySize'];
$res['memFree'] = $sysinfo[0]['FreePhysicalMemory'];
$res['memUsed'] = $res['memTotal'] - $res['memFree'];
$res['memPercent'] = round($res['memUsed'] / $res['memTotal']*100,2);
$swapinfo = GetWMI($wmi,"Win32_PageFileUsage", array('AllocatedBaseSize','CurrentUsage'));
// TODO swp区获取
$res['swapTotal'] = $swapinfo[0][AllocatedBaseSize];
$res['swapUsed'] = $swapinfo[0][CurrentUsage];
$res['swapFree'] = $res['swapTotal'] - $res['swapUsed'];
$res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round($res['swapUsed']/$res['swapTotal']*100,2):0;
// LoadPercentage
$loadinfo = GetWMI($wmi,"Win32_Processor", array("LoadPercentage"));
$res['loadAvg'] = $loadinfo[0]['LoadPercentage'];
return $res;
}
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;
}
在这一节中,我们将杀害二鸟一石。不仅我们将学习如何将面向对象的PHP和MySQL ,但是我们将学习如何组对象。在这种情况下,你将建立一个一流的UsersGroup其中将包含一系列的用户对象。每个用户对象将建立连续使用从MySQL查询。要尝试这个实际例子,您首先需要建立一个用户表在MySQL数据库。我使用的是MySQL数据库命名为' kirupa_oop ` 。使用下面的查询创建表并插入样本数据。
/* Create Users table */
CREATE TABLE `users` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`user_name` TEXT NOT NULL,
PRIMARY KEY (`user_id`)
);
/* Insert sample data into Users table */
INSERT INTO `users`
( `user_id`, `user_name` )
VALUES
( '', 'kirupa' ),
( '', 'bwh2' );
这非常简单的表格只是有两个栏目: ` user_id '和'用户名' 。您不妨添加自己的名称,此表为香料的事情了。
如所承诺的那样,我们将创造一个UsersGroup类。该工作组将包含一系列的用户对象,其中每一项创建使用数据从我们的MySQL的表。我所有的表格上的数据库名为` kirupa_oop ` 。如果您的数据库没有名为' kirupa_oop ' ,您必须更改数据库名称中的设置阶级所示。这里是我们的UsersGroup阶级的行动:
$group = new UsersGroup;
/* loop through our group, echo user names */
foreach( $group->getUsers() as $user ) {
echo $user->getName().'<br />';
}
/* User class, same as before */
class User {
private $name;
function __construct( $attribs ) {
$this->name = $attribs['name'];
}
/* name methods */
function setName( $val ) {
$this->name = $val;
return;
}
function getName() {
return $this->name;
}
}
/* Contains a group of User objects */
class UsersGroup {
private $name; // name of group
private $group = array(); // group of User objects
function __construct() {
/* Connect to DB using Settings */
$link = mysql_connect(
Settings::$DATABASE['host'],
Settings::$DATABASE['username'],
Settings::$DATABASE['password']
);
mysql_select_db ( Settings::$DATABASE['database'], $link );
/* Get table names from Settings class */
$tbl_users = Settings::$TABLES['tbl_users'];
/* Query */
$sql = "SELECT user_id AS ID,
user_name AS name
FROM $tbl_users";
$result = mysql_query( $sql ) or die(mysql_error());
/* Adds user to group with each row of data */
while( $row = mysql_fetch_array($result) ) {
$this->addUser( $row );
}
}
/*
Add a user to Group
Does simple check to see if we pass an array (like $attribs)
or if we pass an object (like a User object)
*/
function addUser( $user ) {
if( is_object( $user ) ) {
array_push( $this->group, $user );
}
if( is_array( $user ) ) {
$noob = new User( $user );
array_push( $this->group, $noob );
}
return;
}
/* Returns the group (which is an array) */
function getUsers() {
return $this->group;
}
}
/* Holds our site settings */
class Settings {
static $DATABASE = array(
// change these as needed 'database' => 'kirupa
首先要说明的是,我们举办我们的数据库连接和资料表名称在我国设置一流的,在静态变量。如果我们需要改变我们的数据库名称,表名称,数据库用户名,等等,我们将只能做,我们设置一流的(这是最好在一个单独的,包括档案) 。我们的用户级是什么新鲜事-它不仅拥有财产的名称,仍然获得了一系列数据经由_ _construct。
让我们来看看的代码UsersGroup类。如果您已经连接到MySQL数据库与PHP之前,连接应该是什么新鲜事。唯一不同的是,我们使用静态变量为我们的连接设置。我们这样做对我们的名字,因为表内的双引号,我们的设置一流的静态变量不能被解析。也就是说,只有使用设置: : $表[ ' tbl_users ' ]直接在我们的双引号SQL查询将导致一个错误。
我们的SQL查询产生了一系列行,我们指定为结果。使用while循环,我们通过我们的$结果阵列。每个元素美元的结果是一系列的价值观(如编号和名称) 。同样,这看起来应该很熟悉的人谁使用PHP来访问MySQL数据库。现在的面向对象的一部分:我们然后通过每一行(列)从我们的MySQL查询我们addUser方法。首先, addUser方法检查,如果被通过一系列的数据(如$行)或整个用户对象。在这种情况下,我们正通过一系列的数据。使用该阵列的数据, addUser创建一个用户对象( $ noob ) ,然后补充说,用户对象的组阵列( $组) 。
注意对列名:当我们的用户目标是建立一系列的数据,构造是寻找所谓的数组元素的名称。为了满足这一要求,我们使用SQL别名,可以看到美元的数据库。如果我们没有别名用户名姓名美元的连续变量将不会举行所谓的数组元素的名称,而是用户名。因此,它不会正确填入变量的名称在我们的用户对象。我宁愿让我定制的SQL ,而不是我的PHP类方法,因为我更可能重用的PHP类方法比SQL查询。举例来说,如果我创建一个狗类,我也希望getName方法和构造。而不是修改几个PHP的方法,以支持而不是狗的用户,我宁愿修改一个SQL查询。另外,您也可以重新命名您的用户名栏,只是名称。这将最大限度地重用,但可能会伤害你的能力理解更复杂的SQL查询和数据库设计。
您可能会考虑这一类是过于复杂。毕竟,您可能代码所有这一切都在15行内经常PHP页面。因此,哪里的优势?好吧,看我们如何利用我们的对象:
/* instantiate group */
$group = new UsersGroup;
/* loop through our group, echo user names */
foreach( $group->getUsers as $user ) {
echo $user->getName().'<br />';
}
function sys_freebsd() {
//CPU
if (false === ($res['cpu']['num'] = get_key("hw.ncpu"))) return false;
$res['cpu']['model'] = get_key("hw.model");
//LOAD AVG
if (false === ($res['loadAvg'] = get_key("vm.loadavg"))) return false;
//UPTIME
if (false === ($buf = 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 = get_key("hw.physmem"))) return false;
$res['memTotal'] = round($buf/1024/1024, 2);
$buf = explode("n", do_command("vmstat", ""));
$buf = explode(" ", trim($buf[2]));
$res['memFree'] = round($buf[5]/1024, 2);
$res['memUsed'] = ($res['memTotal']-$res['memFree']);
$res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0;
$buf = explode("n", do_command("swapinfo", "-k"));
$buf = $buf[1];
preg_match_all("/([0-9]+)s+([0-9]+)s+([0-9]+)/", $buf, $bufArr);
$res['swapTotal'] = round($bufArr[1][0]/1024, 2);
$res['swapUsed'] = round($bufArr[2][0]/1024, 2);
$res['swapFree'] = round($bufArr[3][0]/1024, 2);
$res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round($res['swapUsed']/$res['swapTotal']*100,2):0;
return $res;
}
//取得参数值 FreeBSD
function get_key($keyName) {
return do_command('sysctl', "-n $keyName");
}
//确定执行文件位置 FreeBSD
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
function do_command($commandName, $args) {
$buffer = "";
if (false === ($command = find_command($commandName))) return false;
if ($fp = @popen("$command $args", 'r')) {
while (!@feof($fp)){
$buffer .= @fgets($fp, 4096);
}
return trim($buffer);
}
return false;
}
function sys_linux() {
// CPU
if (false === ($str = @file("/proc/cpuinfo"))) return false;
$str = implode("", $str);
@preg_match_all("/models+names{0,}:+s{0,}([ws)(@.]+)([rn]+)/s", $str, $model);
@preg_match_all("/caches+sizes{0,}:+s{0,}([d.]+s{0,}[A-Z]+[rn]+)/", $str, $cache);
if (false !== is_array($model[1])) {
$res['cpu']['num'] = sizeof($model[1]);
for($i = 0; $i < $res['cpu']['num']; $i++) {
$res['cpu']['model'][] = $model[1][$i];
$res['cpu']['cache'][] = $cache[1][$i];
}
if (false !== is_array($res['cpu']['model'])) $res['cpu']['model'] = implode("<br />", $res['cpu']['model']);
if (false !== is_array($res['cpu']['cache'])) $res['cpu']['cache'] = implode("<br />", $res['cpu']['cache']);
}
// 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("/MemTotals{0,}:+s{0,}([d.]+).+?MemFrees{0,}:+s{0,}([d.]+).+?SwapTotals{0,}:+s{0,}([d.]+).+?SwapFrees{0,}:+s{0,}([d.]+)/s", $str, $buf);
$res['memTotal'] = round($buf[1][0]/1024, 2);
$res['memFree'] = round($buf[2][0]/1024, 2);
$res['memUsed'] = ($res['memTotal']-$res['memFree']);
$res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0;
$res['swapTotal'] = round($buf[3][0]/1024, 2);
$res['swapFree'] = round($buf[4][0]/1024, 2);
$res['swapUsed'] = ($res['swapTotal']-$res['swapFree']);
$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;}
php检测服务器的运行能力
// 检测函数支持
function isfun($funName) {
return (false !== function_exists($funName))?'支持':'<font color=red>不支持</font>';
}
//整数运算能力测试
function test_int() {
$timeStart = gettimeofday();
for($i = 0; $i < 3000000; $i++) {
$t = 1+1;
}
$timeEnd = gettimeofday();
$time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
$time = round($time, 3)."秒";
return $time;
}
//浮点运算能力测试
function test_float() {
//得到圆周率值
$t = pi();
$timeStart = gettimeofday();
for($i = 0; $i < 3000000; $i++) {
//开平方
sqrt($t);
}
$timeEnd = gettimeofday();
$time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
$time = round($time, 3)."秒";
return $time;
}
//IO能力测试
function test_io() {
$fp = @fopen(PHPSELF, "r");
$timeStart = gettimeofday();
for($i = 0; $i < 10000; $i++) {
@fread($fp, 10240);
@rewind($fp);
}
$timeEnd = gettimeofday();
@fclose($fp);
$time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"];
$time = round($time, 3)."秒";
return($time);
}
相关文章
- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
- 这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
- 这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文
时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25- 这篇文章主要介绍了Powershell 查询 Windows 日志的方法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
- 这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
- 这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- 这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
- 这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
- 这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
- 这篇文章主要介绍了C#实现windows form限制文本框输入的方法,涉及C#限制文本框输入的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13