当需要对pc与无线作为一个分支的时候,难免需要对pc与移动终端进行区分,这时候就需要获取客户端访问服务端时,浏览器的头信息所传递的参数进行过滤分类了。
下面这个函数可直接对所有的移动终端进行获取。
返回的结果如果为true则是移动终端,false为pc端。
code:
/**
* 获取客户端是否为移动终端
* 是true or 否false
* @return boolean
* @author hkshadow
*/
function is_mobile_request() {
$_SERVER ['ALL_HTTP'] = isset ( $_SERVER ['ALL_HTTP'] ) ? $_SERVER ['ALL_HTTP'] : '';
$mobile_browser = '0';
if (preg_match ( '/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower ( $_SERVER ['HTTP_USER_AGENT'] ) )){
$mobile_browser ++;
}
if ((isset ( $_SERVER ['HTTP_ACCEPT'] )) and (strpos ( strtolower ( $_SERVER ['HTTP_ACCEPT'] ), 'application/vnd.wap.xhtml+xml' ) !== false)){
$mobile_browser ++;
}
if (isset ( $_SERVER ['HTTP_X_WAP_PROFILE'] )){
$mobile_browser ++;
}
if (isset ( $_SERVER ['HTTP_PROFILE'] )){
$mobile_browser ++;
}
$mobile_ua = strtolower ( substr ( $_SERVER ['HTTP_USER_AGENT'], 0, 4 ) );
$mobile_agents = array ('w3c ', 'acs-', 'alav', 'alca', 'amoi', 'audi', 'avan', 'benq', 'bird', 'blac', 'blaz', 'brew', 'cell', 'cldc', 'cmd-', 'dang', 'doco', 'eric', 'hipt', 'inno', 'ipaq', 'java', 'jigs', 'kddi', 'keji', 'leno', 'lg-c', 'lg-d', 'lg-g', 'lge-', 'maui', 'maxo', 'midp', 'mits', 'mmef', 'mobi', 'mot-', 'moto', 'mwbp', 'nec-', 'newt', 'noki', 'oper', 'palm', 'pana', 'pant', 'phil', 'play', 'port', 'prox', 'qwap', 'sage', 'sams', 'sany', 'sch-', 'sec-', 'send', 'seri', 'sgh-', 'shar', 'sie-', 'siem', 'smal', 'smar', 'sony', 'sph-', 'symb', 't-mo', 'teli', 'tim-', 'tosh', 'tsm-', 'upg1', 'upsi', 'vk-v', 'voda', 'wap-', 'wapa', 'wapi', 'wapp', 'wapr', 'webc', 'winw', 'winw', 'xda', 'xda-' );
if (in_array ( $mobile_ua, $mobile_agents )){
$mobile_browser ++;
}
if (strpos ( strtolower ( $_SERVER ['ALL_HTTP'] ), 'operamini' ) !== false){
$mobile_browser ++;
}
// 如果用户是在Windows,则直接设置为false
if (strpos ( strtolower ( $_SERVER ['HTTP_USER_AGENT'] ), 'windows' ) !== false){
$mobile_browser = 0;
}
// 如果是wp7永无,也是一样,将其设置为false,因为wp7也是windows
if (strpos ( strtolower ( $_SERVER ['HTTP_USER_AGENT'] ), 'windows phone' ) !== false){
$mobile_browser ++;
}
if ($mobile_browser > 0){
return true;
}else{
return false;
}
}