PHP 实现判断用户是否手机访问


Posted in PHP onJanuary 21, 2015

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

自定义的函数如下:

$agent = check_wap();

if( $agent )

{

  header('Location: http://www.nowamagic.net');

  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字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
PHP常用的文件操作函数经典收藏
Apr 02 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
php随机取mysql记录方法小结
Dec 27 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
php中Snoopy类用法实例
Jun 19 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP入门教程之面向对象基本概念实例分析
Sep 11 PHP
PHP培训要多少钱
Jun 06 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 PHP
PHP中imagick函数的中文解释
Jan 21 #PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 #PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 #PHP
PHP中让curl支持sock5的代码实例
Jan 21 #PHP
PHP中使用break跳出多重循环代码实例
Jan 21 #PHP
PHP获取数组最后一个值的2种方法
Jan 21 #PHP
PHP中iconv函数转码时截断字符问题的解决方法
Jan 21 #PHP
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
php根据年月获取季度的方法
2014/03/31 PHP
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中列表和元组的区别
2017/12/18 Python
python入门教程 python入门神图一张
2018/03/05 Python
python绘制简单彩虹图
2018/11/19 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
2019/07/03 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
wxPython实现整点报时
2019/11/18 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
商场中秋节活动方案
2014/02/07 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
小学工作总结2015
2015/05/04 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle