【问题标题】:PHP and Windows WMI, CPU Temperature and false readings?PHP 和 Windows WMI、CPU 温度和错误读数?
【发布时间】:2012-04-10 23:53:33
【问题描述】:

我写了这个 PHP 函数:

<?php
//windows cpu temperature
function win_cpu_temp(){
    $wmi = new COM("winmgmts://./root\WMI");
    $cpus = $wmi->execquery("SELECT * FROM MSAcpi_ThermalZoneTemperature");
    foreach ($cpus as $cpu) {
        $cpupre = $cpu->CurrentTemperature;
    }
    $cpu_temp = ($cpupre/10)-273.15 . ' C';
    return $cpu_temp;
}
echo win_cpu_temp();
?>

我的问题是脚本显示59.55 C,我认为这是正确的。几个小时后我检查了这个值,它完全一样。我只是让 CPU 以 90% 压缩视频工作十分钟,这个值还是一样的。

谁能帮我找到这个函数的“真实”值?

我已阅读(无济于事): MSAcpi_ThermalZoneTemperature class not showing actual temperature

比如说,“Core Temp”是如何获得它的值的?同一台电脑,它报告的温度在 49 到 53 摄氏度之间。

【问题讨论】:

    标签: php function wmi cpu


    【解决方案1】:

    经过一番挖掘,我发现使用 MSAcpi_ThermalZoneTemperature 的常见问题是它依赖于在您的系统上实现。

    您可以尝试查询Win32_TemperatureProbe,看看您是否有运气。

    MSAcpi_ThermalZoneTemperature 或 Win32_TemperatureProbe 在我的系统上都不起作用,但如果您有管理员访问权限,则可以使用 http://openhardwaremonitor.org/,它为所有可用的传感器数据提供 WMI 接口。

    这对我很有用,我能够从 PHP 脚本准确地报告 CPU 核心温度:

    function report_cpu_temp(){    
        $wmi = new COM('winmgmts://./root/OpenHardwareMonitor');
        $result = $wmi->ExecQuery("SELECT * FROM Sensor");
        foreach($result as $obj){
            if($obj->SensorType == 'Temperature' && strpos($obj->Parent, 'cpu') > 0)
                echo "$obj->Name ($obj->Value C)"; // output cpu core temp
            else
                echo 'skipping ' . $obj->Identifier ;
            echo '<br />';
        }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 这在我的任何系统上都没有按原样工作,但我看到了它的去向,并将相应地修改它。
    • 非常适合我,只需复制和粘贴代码。运行完美。谢谢,如简单而好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多