在PHP中使用exec()从WMIC获取CPU负载时,只能通过提示符工作,不能通过调用
我需要一个功能,将在Windows10上工作,将获取我的服务器的当前CPU使用 我想到了:在PHP中使用exec()从WMIC获取CPU负载时,只能通过提示符工作,不能通过调用,php,codeigniter,cmd,load,exec,Php,Codeigniter,Cmd,Load,Exec,我需要一个功能,将在Windows10上工作,将获取我的服务器的当前CPU使用 我想到了: function get_server_load() { exec('wmic cpu get loadpercentage', $cpuload); //print_r($cpuload); return $cpuload; } 无论出于何种目的,这应该不会有任何问题。但是,我的API显示了如下字符串: {“status”:true,“message”:“OK”,“cpu
function get_server_load() {
exec('wmic cpu get loadpercentage', $cpuload);
//print_r($cpuload);
return $cpuload;
}
无论出于何种目的,这应该不会有任何问题。但是,我的API显示了如下字符串:
{“status”:true,“message”:“OK”,“cpu使用”:[“LoadPercentage”、“”、“”、“”、“”]、“mem_使用”:“”}
如果我在cmd.exe中使用与“wmic cpu get loadpercentage”相同的命令,我将获得预期的输出:
装载百分比12
几乎就好像exec()
忽略了第二行,因为它返回的是“LoadPercentage
”字符串,而不是数值。在我的API示例中,我还应该注意到服务器有一对双四核Xeon CPU
,这解释了额外的引号集
但是,这不是问题的原因,因为我可以独立验证使用单个FX6350 CPU的另一台机器上是否存在问题。在该机器中,我使用单独安装的Windows 10、IIS、PHP 5.6,在那里安装API,并获得以下输出:
{“status”:true,“message”:“OK”,“cpu使用”:[“LoadPercentage”,“”,“”,“”],“mem_use”:“}
我有意进行CPU挖掘,以测试CPU负载-即使在100%的情况下,API也包含空值
出于包含原因,下面是对get_server_load()函数的调用(请注意,此时有意注释掉内存信息):
public function general_get(){
$this->response([
'status' => TRUE,
'message' => 'OKAY',
'cpu_use' => get_server_load(),
'mem_use' => ''//get_server_memory_available()
], 200);
//echo phpinfo();
}
如果我遗漏了任何相关数据,请询问,但我无法理解为什么我在PHP版本中得到空值
我想指定,与问题不同的是,我没有试图将WMIC值与任务管理器值匹配。我试图使实际的WMIC值显示在PHP变量中。您是否应该使用shell\u exec()
?我似乎得到了两者相同的结果。你知道吗%SystemRoot%\System32\wbem\wmic.exe
总是输出UTF-16 Little-Endian编码的文本,当然,在通过PHP脚本代码捕获和处理此输出时必须考虑到这一点。顺便说一句:堆栈溢出搜索,目前返回399个结果。有很多问题Stion找到了已接受的答案。看来其他人已经用PHP成功解决了此任务,您只需阅读他们的解决方案即可。@Mofi感谢您的帮助,但我应该注意,在这399中,我尝试了300种方法,包括使用COM类调用,但始终没有有效的cpu加载字符串。但是字符串编码可能是我可以使用的。您是否应该使用shell_exec()
?我似乎得到了两者相同的结果。你知道吗%SystemRoot%\System32\wbem\wmic.exe
总是输出UTF-16 Little-Endian编码的文本,当然,在通过PHP脚本代码捕获和处理此输出时必须考虑到这一点。顺便说一句:堆栈溢出搜索,目前返回399个结果。有很多问题Stion找到了已接受的答案。看来其他人已经用PHP成功解决了此任务,您只需阅读他们的解决方案即可。@Mofi感谢您的帮助,但我应该注意,在这399中,我尝试了300种方法,包括使用COM类调用,但始终没有有效的cpu加载字符串。但是字符串编码可能是我可以使用的。