Назад | Перейти на главную страницу

Определить поставщика ЦП в OSX

Итак, я подумал о том, чтобы спросить здесь вместо SO, потому что люди здесь, скорее всего, будут знакомы с этим.

В настоящее время я использую PHP для обнаружения некоторых общих вещей в ОС хоста. В этом случае я пытаюсь определить производителя процессора.

Для этого у меня есть:

OSX действительно моя проблема. У меня нет тестовой машины, и я отказываюсь запускать незаконную виртуальную машину (я уже использую 11 легальных виртуальных машин).

Итак, поскольку Apple делает это невозможным, не потратив не менее 500 долларов на запуск osx, я решил обратиться к кому-нибудь еще, чтобы помочь мне в этом.

Я бы хотел, чтобы эта команда работала как на PPC, так и на Intel моделях.

Связанная тема на SO опять же, я не могу запустить ни одну из этих команд.

Попробуйте это с терминала или выполните при необходимости:

system_profiler|grep Processor

Образец:

> dmourati$ system_profiler|grep Processor
>       Processor Name: Intel Core 2 Duo
>       Processor Speed: 2 GHz
>       Number Of Processors: 1

Более быстрый способ, чем в предыдущем посте:

system_profiler SPHardwareDataType | grep Processor\ Name

Это ограничивает сканирование только оборудования, что быстрее, чем сканирование всей системы.

Вы также можете изменить первую команду на system_profiler -xml SPHardwareDataType, если вы хотите прочитать ее как XML и проанализировать ее таким образом (что должно быть более стабильным, если вывод изменяется от версии к версии.

Я отвечаю на свой вопрос, потому что я нашел наиболее подходящий ответ, но не без помощи двух вышеупомянутых людей. Итак, большое спасибо, ребята.

Примечание: Есть дополнительная команда, потому что я обнаружил, что в старой версии PPC нет «Имя процессора», а вместо него указано «Тип процессора». Команда system_profiler SPHardwareDataType | grep CPU\ Type исправил проблему. Я просто переключаюсь на него, если предложенный не дает результатов.

Вот код:

// ...
case 'osx':
    // check on OSX
    $res=self::execute('system_profiler SPHardwareDataType | grep Processor\ Name');
    $procid=trim(strtolower($res['stdout']));
    if($procid==''){ // for older PPC-based models
        $res=self::execute('system_profiler SPHardwareDataType | grep CPU\ Type');
        $procid=trim(strtolower($res['stdout']));
    }
    break;
// ...

// match vendor
if(strpos($procid,'intel')  !==false)return 'intel';
if(strpos($procid,'amd')    !==false)return 'amd';
if(strpos($procid,'ppc')    !==false)return 'ppc';
if(strpos($procid,'powerpc')!==false)return 'ppc';

Примечание о зависимости

Я использую специальную функцию для выполнения команд. Он возвращает массив result, stdout, stderr среди прочего. В этом случае только stdout уже используется, поэтому вы можете заменить его на shell_exec().