Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用exec()从WMIC获取CPU负载时,只能通过提示符工作,不能通过调用_Php_Codeigniter_Cmd_Load_Exec - Fatal编程技术网

在PHP中使用exec()从WMIC获取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

我需要一个功能,将在Windows10上工作,将获取我的服务器的当前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加载字符串。但是字符串编码可能是我可以使用的。