PHP判断访客是否手机移动端访问
发表于:2015-04-07分类:PHP笔记网上找了很多方法基本上都是判断$_SERVER
方法。我整理了一下。请注意在使用的时候尽量兼容大小写来判断。
1.根据UA字符串特征判断
通过$_SERVER['HTTP_USER_AGENT']
获取浏览器的UA,使用字符串搜索来判断是否拥有字符串特征。移动端特征有非常非常多,所以使用ua判断不是100%准确,很可能误判,常见的特征有:
Array('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
2.$_SERVER['HTTP_X_WAP_PROFILE']判断
$_SERVER['HTTP_X_WAP_PROFILE']
该值为真,那就一定是移动客户端。但是移动客户端也可能获取不到该值。
3.$_SERVER['HTTP_VIA']判断
stristr($_SERVER['HTTP_VIA'],"wap")
//判断该值是否存在wap,如果为真,那就一定是移动客户端。但是同上移动客户端也可能获取不到该值。
//stristr兼容大小写
4.$_SERVER['HTTP_ACCEPT']判断
$_SERVER['HTTP_ACCEPT']
如果只支持wml并且不支持html那一定是移动设备,如果支持wml和html但是wml在html之前则是移动设备
if ((stripos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (stripos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (stripos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < stripos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
//stripos函数兼容大小写
5.更强大的Mobile-Detect 开源类
项目地址:https://github.com/serbanghita/Mobile-Detect
或者:http://mobiledetect.net/
使用方法:
require_once 'Mobile_Detect.php';//引用
$detect = new Mobile_Detect;//实例化
if ( $detect->isMobile() ) {
} //判断全部移动端(含平板)
if( $detect->isTablet() ){
} //判断是不是平板
if( $detect->isMobile() && !$detect->isTablet() ){
} //判断全部移动端(除了平板)
if( $detect->isiOS() ){
} //判断IOS系统
if( $detect->isAndroidOS() ){
} //判断苹果系统
//该函数还能判断浏览器品牌,和移动设备的型号等。不过需要保持更新才能保持判断准确率。
6.摘自thinkphp的判断方法 比较靠谱:是1-4方法的大集合
请注意替换兼容大小写的函数来提高准确性,以下摘自:http://www.thinkphp.cn/topic/6541.html
function ismobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
//此条摘自TPM智能切换模板引擎,适合TPM开发
if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
return true;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA']))
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
//判断手机发送的客户端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
);
//从HTTP_USER_AGENT中查找手机浏览器的关键字
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
return true;
}
}
//协议法,因为有可能不准确,放到最后判断
if (isset ($_SERVER['HTTP_ACCEPT'])) {
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
更多参考
http://freenish.com/3-ways-to-detect-mobile-devices-in-your-website-by-using-php/
http://www.laozuo.org/1329.html (前端javascript跳转)
http://www.w3cschool.cc/cssref/css3-pr-mediaquery.html (前端 CSS3 @media 判断宽度max-width 响应式设计 )