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 相关文章推荐
substr()函数中文版
Oct 09 PHP
PHP获取MAC地址的函数代码
Sep 11 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
详解PHP对数组的定义以及数组的创建方法
Nov 27 PHP
windows平台中配置nginx+php环境
Dec 06 PHP
php while循环控制的简单实例
May 30 PHP
php设计模式之单例模式代码
Jun 11 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
thinkphp5框架API token身份验证功能示例
May 21 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 模板高级篇总结
2006/12/21 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
python操作xml文件示例
2014/04/07 Python
使用Python开发windows GUI程序入门实例
2014/10/23 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
爱情保证书范文
2014/02/01 职场文书
工作睡觉检讨书
2014/02/25 职场文书
新农村建设典型材料
2014/05/31 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
个人委托书范文
2015/01/28 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python