2012-04-10 10 views
3

私はこのPHP関数を書いた:PHPとWindows WMI、CPU温度と誤読は?

<?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 class not showing actual temperature

方法は、その値を取得し、たとえば、 "コア温度" とは?同じコンピュータで、49と53℃の間で報告されています。

答えて

4

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 />'; 
    } 
} 

は、この情報がお役に立てば幸いです。

+0

これは私のシステムで書かれたようには機能しませんでしたが、どこに行くのかを見てそれに応じて修正します。 – ionFish

関連する問題