Итак, я подумал о том, чтобы спросить здесь вместо SO, потому что люди здесь, скорее всего, будут знакомы с этим.
В настоящее время я использую PHP для обнаружения некоторых общих вещей в ОС хоста. В этом случае я пытаюсь определить производителя процессора.
Для этого у меня есть:
execute('grep -m 1 vendor_id /proc/cpuinfo')
getenv('PROCESSOR_IDENTIFIER')
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()
.