所以,我考虑在这里问,而不是SO,因为这里的人更可能熟悉这个东西。
我目前正在使用PHP来检测主机操作系统上的一些通用的东西。 在这种情况下,我试图检测CPU供应商。
要做到这一点,我有:
execute('grep -m 1 vendor_id /proc/cpuinfo')
getenv('PROCESSOR_IDENTIFIER')
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
数组, stdout
, stderr
等等。 在这种情况下,只有stdout
被使用,所以你可以用shell_exec()
replace它。