php在windows环境下获得cpu内存实时使用率(推荐)
后台实时监控服务器的CUP与内存占用率的场景很常见,虽然没做过,但是着手写代码之前我真没想到会花2个多小时才最终实现。
网上虽然搜PHPCUP内存使用率这一类关键字出来的文章一大把,但大都是在Linux环境下,windows下只有提出靠cmd语句实现的观点,但少有实际直接可行的代码,辗转试了一遍wmic,systeminfo各种并不熟稔的cmd命令,并没有找到可行的方案,最终通过百度知道的一篇答案找到利用vbs获取的实现方式,稍加改善,可以在windows环境下直接使用。
类代码
classSystemInfoWindows { /** *判断指定路径下指定文件是否存在,如不存在则创建 *@paramstring$fileName文件名 *@paramstring$content文件内容 *@returnstring返回文件路径 */ privatefunctiongetFilePath($fileName,$content) { $path=dirname(__FILE__)."\\$fileName"; if(!file_exists($path)){ file_put_contents($path,$content); } return$path; } /** *获得cpu使用率vbs文件生成函数 *@returnstring返回vbs文件路径 */ privatefunctiongetCupUsageVbsPath() { return$this->getFilePath( 'cpu_usage.vbs', "OnErrorResumeNext SetobjProc=GetObject(\"winmgmts:\\\\.\\root\cimv2:win32_processor='cpu0'\") WScript.Echo(objProc.LoadPercentage)" ); } /** *获得总内存及可用物理内存JSONvbs文件生成函数 *@returnstring返回vbs文件路径 */ privatefunctiongetMemoryUsageVbsPath() { return$this->getFilePath( 'memory_usage.vbs', "OnErrorResumeNext SetobjWMI=GetObject(\"winmgmts:\\\\.\\root\cimv2\") SetcolOS=objWMI.InstancesOf(\"Win32_OperatingSystem\") ForEachobjOSincolOS Wscript.Echo(\"{\"\"TotalVisibleMemorySize\"\":\"&objOS.TotalVisibleMemorySize&\",\"\"FreePhysicalMemory\"\":\"&objOS.FreePhysicalMemory&\"}\") Next" ); } /** *获得CPU使用率 *@returnNumber */ publicfunctiongetCpuUsage() { $path=$this->getCupUsageVbsPath(); exec("cscript-nologo$path",$usage); return$usage[0]; } /** *获得内存使用率数组 *@returnarray */ publicfunctiongetMemoryUsage() { $path=$this->getMemoryUsageVbsPath(); exec("cscript-nologo$path",$usage); $memory=json_decode($usage[0],true); $memory['usage']=Round((($memory['TotalVisibleMemorySize']-$memory['FreePhysicalMemory'])/$memory['TotalVisibleMemorySize'])*100); return$memory; } }
调用方式
$info=newSystemInfoWindows(); $cpu=$info->getCpuUsage(); $memory=$info->getMemoryUsage(); echo"当前系统CPU使用率:{$cpu}%,内存使用率{$memory['usage']}%";
总结
以上所述是小编给大家介绍的php在windows环境下获得cpu内存实时使用率,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!