php网站判断用户是否是手机访问的方法


Posted in PHP onNovember 01, 2013

随着移动设备的普及,网站也会迎来越来越多移动设备的访问。用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面。这里就介绍一下,如何判断用户是否用手机访问。

自定义的函数如下:

$agent = check_wap();
if( $agent )
{
  header('Location: https://3water.com');
  exit;
}
 
// check if wap 
function check_wap(){
  // 先检查是否为wap代理,准确度高
  if(stristr($_SERVER['HTTP_VIA'],"wap")){
    return true;
  }
  // 检查浏览器是否接受 WML.
  elseif(strpos(strtoupper($_SERVER['HTTP_ACCEPT']),"VND.WAP.WML") > 0){
    return true;
  }
  //检查USER_AGENT
  elseif(preg_match('/(blackberry|configuration\/cldc|hp |hp-|htc |htc_|htc-|iemobile|kindle|midp|mmp|motorola|mobile|nokia|opera mini|opera |Googlebot-Mobile|YahooSeeker\/M1A1-R2D2|android|iphone|ipod|mobi|palm|palmos|pocket|portalmmm|ppc;|smartphone|sonyericsson|sqh|spv|symbian|treo|up.browser|up.link|vodafone|windows ce|xda |xda_)/i', $_SERVER['HTTP_USER_AGENT'])){
    return true;       
  }
  else{
    return false;  
  }
}

再来一个从PHP框架剥离的判断是否为手机移动终端的函数:(经过测试,很全面,推荐使用)

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++;  
 // Pre-final check to reset everything if the user is on Windows  
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false)  
  $mobile_browser=0;  
 // But WP7 is also Windows, with a slightly different characteristic  
 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false)  
  $mobile_browser++;  
 if($mobile_browser>0)  
  return true;  
 else 
  return false;
PHP 相关文章推荐
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP flush()与ob_flush()的区别详解
Jun 03 PHP
php连接函数implode与分割explode的深入解析
Jun 26 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
php实现通过ftp上传文件
Jun 19 PHP
PHP实现对二维数组某个键排序的方法
Sep 14 PHP
Yii框架分页实现方法详解
May 20 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php合并js请求的例子
Nov 01 #PHP
php上传文件中文文件名乱码的解决方法
Nov 01 #PHP
PHP防止跨域提交表单
Nov 01 #PHP
PHP查询网站的PR值
Oct 30 #PHP
PHP禁止个别IP访问网站
Oct 30 #PHP
php cURL和Rolling cURL并发方式比较
Oct 30 #PHP
使用PHP Socket写的POP3类
Oct 30 #PHP
You might like
PHP中str_replace函数使用小结
2008/10/11 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
php实现微信企业转账功能
2018/10/02 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
javascript加号"+"的二义性说明
2013/03/04 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
uni-app如何实现增量更新功能
2020/01/03 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
linux下python抓屏实现方法
2015/05/22 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
狼和鹿教学反思
2014/02/05 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
单位工作证明书格式
2014/10/04 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书