示例#1
0
    private function GetCPUInformations() {
        $bufr = "";
        $results = array("cpus"=>0);
        if (CommonFunctions::rfts('/proc/cpuinfo', $bufr)) {
            $bufe = explode("\n", $bufr);
            $results = array('cpus'=>0, 'bogomips'=>0);
            $arrBuff = array();
            foreach ($bufe as $buf) {
                $arrBuff = preg_split('/\s+:\s+/', trim($buf));
                if (count($arrBuff) == 2) {
                    $key = $arrBuff[0];
                    $value = $arrBuff[1];
                    switch ($key) {
                        case 'model name':
                            $results['model'] = $value;
                            break;
                        case 'cpu MHz':
                            $results['cpuspeed'] = sprintf('%.2f', $value);
                            break;
                        case 'cycle frequency [Hz]':
                            $results['cpuspeed'] = sprintf('%.2f', $value / 1000000); // For Alpha arch - 2.2.x
                            break;
                        case 'clock':
                            $results['cpuspeed'] = sprintf('%.2f', $value); // For PPC arch (damn borked POS)
                            break;
                        case 'cpu':
                            $results['model'] = $value; // For PPC arch (damn borked POS)
                            break;
                        case 'L2 cache':
                            $results['cache'] = $value * 1024; // More for PPC
                            break;
                        case 'revision':
                            $results['model'] .= ' ( rev: '.$value.')'; // For PPC arch (damn borked POS)
                            break;
                        case 'cpu model':
                            $results['model'] .= ' ('.$value.')'; // For Alpha arch - 2.2.x
                            break;
                        case 'cache size':
                            $results['cache'] = (preg_replace("/[a-zA-Z]/", "", $value)) * 1024;
                            break;
                        case 'bogomips':
                            $results['bogomips'] += $value;
                            break;
                        case 'BogoMIPS':
                            $results['bogomips'] += $value; // For alpha arch - 2.2.x
                            break;
                        case 'BogoMips':
                            $results['bogomips'] += $value; // For sparc arch
                            break;
                        case 'cpus detected':
                            $results['cpus'] += $value; // For Alpha arch - 2.2.x
                            break;
                        case 'system type':
                            $results['model'] .= ', '.$value.' '; // Alpha arch - 2.2.x
                            break;
                        case 'platform string':
                            $results['model'] .= ' ('.$value.')'; // Alpha arch - 2.2.x
                            break;
                        case 'processor':
                            $results['cpus'] += 1;
                            break;
                        case 'Cpu0ClkTck':
                            $results['cpuspeed'] = sprintf('%.2f', hexdec($value) / 1000000); // Linux sparc64
                            break;
                        case 'Cpu0Bogo':
                            $results['bogomips'] += $value; // Linux sparc64 & sparc32
                            break;
                        case 'ncpus probed':
                            $results['cpus'] = $value; // Linux sparc64 & sparc32
                            break;
                    }
                }
            }
            // sparc64 specific code follows
            // This adds the ability to display the cache that a CPU has
            // Originally made by Sven Blumenstein <*****@*****.**> in 2004
            // Modified by Tom Weustink <*****@*****.**> in 2004
            $sparclist = array('SUNW,UltraSPARC@0,0', 'SUNW,UltraSPARC-II@0,0', 'SUNW,UltraSPARC@1c,0', 'SUNW,UltraSPARC-IIi@1c,0', 'SUNW,UltraSPARC-II@1c,0', 'SUNW,UltraSPARC-IIe@0,0');
            foreach ($sparclist as $name) {
                if (CommonFunctions::rfts('/proc/openprom/'.$name.'/ecache-size', $buf, 1, 32, false)) {
                    $results['cache'] = base_convert($buf, 16, 10);
                }
            }
            // sparc64 specific code ends
            // XScale detection code
            if ($results['cpus'] == 0) {
                foreach ($bufe as $buf) {
                    $fields = preg_split('/\s*:\s*/', trim($buf), 2);
                    if (sizeof($fields) == 2) {
                        list($key, $value) = $fields;
                        switch ($key) {
                            case 'Processor':
                                $results['cpus'] += 1;
                                $results['model'] = $value;
                                break;
                            case 'BogoMIPS':
                                $results['cpuspeed'] = $value; //BogoMIPS are not BogoMIPS on this CPU, it's the speed, no BogoMIPS available
                                break;
                            case 'I size':
                                $results['cache'] = $value * 1024;
                                break;
                            case 'D size':
                                $results['cache'] += $value * 1024;
                                break;
                        }
                    }
                }
            }
        }
        $keys = array_keys($results);
        $keys2be = array('model', 'cpuspeed', 'cpus');
        while ($ar_buf = each($keys2be)) {
            if (!in_array($ar_buf[1], $keys)) {
                $results[$ar_buf[1]] = '0';
            }
        }
        if (CommonFunctions::rfts('/proc/acpi/thermal_zone/THRM/temperature', $buf, 1, 4096, false)) {
            $results['temp'] = substr($buf, 25, 2);
        }

        //$results['CPULoad'] = $this->CPULoad();

        return CommonFunctions::ArrayToXML(array($results), 'CPUInformations');
    }