PHP提取客户端的操作系统信息,并识别移动设备

原创 zhaoliang  2015-04-15 09:32  阅读 777 views 次

在编写网站类程序的过程中,经常需要区别对待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<version>\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<version>\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<version>\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<version>\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);
}

 

本文地址:http://blog.58cm.cn:8088/archives/42.html
版权声明:本文为原创文章,版权归 zhaoliang 所有,欢迎分享本文,转载请保留出处!

评论已关闭!