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 存取 MySQL 数据库的一个例子
Oct 09 PHP
PHP Pear 安装及使用
Mar 19 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
php实现分页工具类分享
Jan 09 PHP
php常用字符串比较函数实例汇总
Nov 24 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 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实现基于栈的后缀表达式求值功能
2017/11/10 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
javascript的BOM汇总
2015/07/16 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
vue-router相关基础知识及工作原理
2018/03/16 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python基于回溯法子集树模板解决取物搭配问题实例
2017/09/02 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
python高阶爬虫实战分析
2018/07/29 Python
详解python-图像处理(映射变换)
2019/03/22 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
预备党员转正思想汇报
2014/01/12 职场文书
八一慰问活动方案
2014/02/07 职场文书
财产公证书格式
2014/04/10 职场文书
合同协议书格式
2014/04/18 职场文书
励志演讲稿300字
2014/08/21 职场文书
企业整改报告范文
2014/11/08 职场文书
小学班主任评语
2014/12/29 职场文书
学习保证书怎么写
2015/02/26 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python