在OSX上检测CPU供应商

所以,我考虑在这里问,而不是SO,因为这里的人更可能熟悉这个东西。

我目前正在使用PHP来检测主机操作系统上的一些通用的东西。 在这种情况下,我试图检测CPU供应商。

要做到这一点,我有:

  • linux: execute('grep -m 1 vendor_id /proc/cpuinfo')
  • windows: getenv('PROCESSOR_IDENTIFIER')
  • osx: ???

OSX确实是我的问题。 我没有testing机器,我拒绝运行一个非法的虚拟机(我已经使用了11个合法的虚拟机)。

所以,由于苹果公司不可能花费不less于500美元就可以运行osx,所以我决定诉诸别人来帮助我实现这一目标。

我希望命令能够在PPC和Intel模型上工作。

有关线程再次,我不能够运行任何这些命令。

从terminal尝试此操作或根据需要执行:

 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 

这限制了只扫描硬件,这比扫描整个系统要快。

如果要以XML的forms读取并将其parsing(如果输出从版本到版本更改,应该更稳定),也可以将第一个命令更改为system_profiler -xml SPHardwareDataType。

我正在回答我的问题,因为我得到了最合适的答案,但是没有上面两个人的帮助。 所以,谢谢很多家伙

注意:还有一个额外的命令,因为我发现在旧的PPC版本上没有“处理器名称”,而是“CPUtypes”。 命令system_profiler SPHardwareDataType | grep CPU\ Type system_profiler SPHardwareDataType | grep CPU\ Type修复了这个问题。 我只是切换到它,如果build议的不会产生结果。

代码如下:

 // ... 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数组, stdoutstderr等等。 在这种情况下,只有stdout被使用,所以你可以用shell_exec()replace它。