3

私はこの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% 圧縮ビデオで 10 分間動作させただけですが、この値は依然として同じです。

この関数の「真の」値を見つけるのを手伝ってくれる人はいますか?

私は読んだ(役に立たない): MSAcpi_ThermalZoneTemperatureクラスが実際の温度を表示していない

たとえば、「Core Temp」はどのように値を取得していますか? 同じコンピューターで、摂氏 49 から 53 の間で報告されます。

4

1 に答える 1

5

少し調べてみると、MSAcpi_ThermalZoneTemperature の使用に関する一般的な問題は、システムに実装されていることに依存していることがわかりました。

Win32_TemperatureProbeにクエリを実行してみて、運が良かったかどうかを確認してください。

MSAcpi_ThermalZoneTemperature も Win32_TemperatureProbe も私のシステムでは機能しませんでしたが、管理者アクセス権があれば、利用可能なすべてのセンサー データに WMI インターフェイスを提供するhttp://openhardwaremonitor.org/を使用できます。

これは私にとってはうまく機能し、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 />';
    }
}

お役に立てれば。

于 2012-04-13T20:59:22.747 に答える