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的开合式多级菜单程序
Oct 09 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
Jun 10 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
smarty内置函数capture用法分析
Jan 22 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
php实现的递归提成方案实例
Nov 14 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP中md5()函数的用法讲解
Mar 30 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多种序列化与反序列化的方法
2013/06/06 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
popdiv
2006/07/14 Javascript
记录几个javascript有关的小细节
2007/04/02 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Python私有属性私有方法应用实例解析
2020/09/15 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
面包店的创业计划书范文
2014/01/16 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
导游词300字
2015/02/13 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
使用feign服务调用添加Header参数
2021/06/23 Java/Android
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL