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
DedeCms模板安装/制作概述
Mar 11 PHP
学习php笔记 字符串处理
Oct 19 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
Smarty保留变量用法分析
May 23 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
Feb 04 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 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/21 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
javascript中xml操作实现代码
2011/11/21 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
python中global与nonlocal比较
2014/11/21 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python操作json的方法实例分析
2018/12/06 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
django在开发中取消外键约束的实现
2020/05/20 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
木工主管岗位职责
2013/12/08 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
工作服管理制度范本
2015/08/06 职场文书
思想工作总结范文
2015/08/12 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
导游词之介休绵山
2019/12/31 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
MySQL 分页查询的优化技巧
2021/05/12 MySQL