2012-04-10 10 views
3

ich diese PHP-Funktion geschrieben:PHP und Windows WMI, CPU-Temperatur und falsche Messwerte?

<?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(); 
?> 

Mein Problem ist, dass das Skript zeigt 59.55 C, die ich gedacht hatte, war richtig. Ich habe diesen Wert einige Stunden später überprüft und es ist genau dasselbe. Ich stelle die CPU nur für 10 Minuten auf eine 90% komprimierte Grafik ein, und dieser Wert ist immer noch gleich.

Kann mir jemand helfen, den "wahren" Wert für diese Funktion zu finden?

ich gelesen habe (ohne Erfolg): MSAcpi_ThermalZoneTemperature class not showing actual temperature

Wie wird sagen: "Core Temp" seine Werte zu bekommen? Derselbe Computer meldet zwischen 49 und 53 Celsius.

Antwort

4

Mit ein wenig herum Graben fand ich das häufige Problem mit der Verwendung von MSAcpi_ThermalZoneTemperature war, dass es abhängig von der Implementierung auf Ihrem System ist.

Sie könnten versuchen, Win32_TemperatureProbe Abfrage und sehen, ob Sie etwas Glück dort haben.

Weder MSAcpi_ThermalZoneTemperature noch Win32_TemperatureProbe funktionierten auf meinem System. Wenn Sie jedoch Administratorzugriff haben, können Sie http://openhardwaremonitor.org/ verwenden, der eine WMI-Schnittstelle für alle verfügbaren Sensordaten bereitstellt.

Das funktionierte gut für mich und ich war in der Lage genau CPU-Kerntemperatur von einem PHP-Skript zu berichten:

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

Hoffnung, das hilft.

+0

Dies funktionierte nicht wie geschrieben auf einem meiner Systeme, aber ich sehe, wo es geht und wird es entsprechend ändern. – ionFish

Verwandte Themen