在编写网站类程序的过程中,经常需要区别对待PC与移动设备。然而在科技高速发展的今天,PC设备和移动设备种类繁杂,如何准确识别客户使用的设备信息,就成了困扰我们广大程序猿同胞们的一个难题。
在这里,笔者结合自己的工作经验,参照诸多来自互联网上的各种资料,进行了简要的整合,通过运行该程序,可以识别出大多数主流的设备信息,现将代码分享给大家:
public static function getOS(){
if(! isset($_SERVER['HTTP_USER_AGENT']) ){
return array();
}
$agent = $_SERVER['HTTP_USER_AGENT'];
$type= 'pc';//设备类型默认为PC
$version= '';//系统版本
if( preg_match('/AppleWebKit.*Mobile|Android/i',$agent) || preg_match('/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/i',$agent)){
//移动设备
$type= 'mobile';
if( strpos($agent,'iPhone') !== false ){
//iPhone手机
$agent_os= 'iPhone OS';
preg_match('/iPhone OS (?P\d(_\d+)+)/i', $agent,$match);
if($match && isset($match['version'])){
$version= str_replace('_','.',$match['version']);
}
} else if( strpos($agent,'iPad') !== false ){
//iPad平板
$agent_os= 'iPad OS';
preg_match('/OS (?P\d(_\d+)+)/i', $agent,$match);
if($match && isset($match['version'])){
$version= str_replace('_','.',$match['version']);
}
} else if( strpos($agent,'Android') !== false ){
//Android设备,手机和平板
preg_match('/Android (?P\d(\.\d+)+)/i',$agent,$match);
$agent_os= 'Android';
if( $match && isset($match['version']) ){
$version= $match['version'];
}
} else if( strpos($agent,'Windows Phone') ){
//Window手机操作系统
$agent_os= 'Windows Phone';
preg_match('/Windows Phone (?P\d(\.\d+)+)/i',$agent,$match);
if( $match && isset($match['version']) ){
$version= $match['version'];
}
} else if( stripos($agent,'symbian') !== false ){
//老旧的塞班系统
$agent_os= 'SymbianOS';
} else {
$agent_os= 'other';
}
} else if( strpos($agent, 'Windows') !== false ){
//pc端的windows系统分类
$os_win = array(
'NT 10.0'=> 'Windows 10',
'NT 6.4'=> 'Windows 10',
'NT 6.3'=> 'Windows 8',
'NT 6.2'=> 'Windows 8',
'NT 6.1'=> 'Windows 7',
'NT 6.0'=> 'Windows Vista',
'NT 5.1'=> 'Windows XP',
'NT 5.0'=> 'Windows 2000',
'NT'=> 'Windows NT',
);
$agent_os= 'Windows';
foreach($os_win as $core => $os){
if(stripos($agent,$core) !== false){
$agent_os= $os;
break;
}
}
} else if( stripos($agent, 'mac') !== false){
$agent_os= 'Mac OS';
} else if( stripos($agent, 'ubuntu') !== false){
$agent_os= 'Ubuntu';
} else if( stripos($agent, 'debian') !== false){
$agent_os = 'Debian';
} else if( stripos($agent, 'linux') !== false) {
$agent_os= 'Linux';
} else {
$agent_os= 'other';
}
return array('type' => $type, 'os' => $agent_os, 'version' => $version);
}