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与javascript对多项选择的处理
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
PHP 远程关机实现代码
Nov 10 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
laravel安装和配置教程
Oct 29 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
解决laravel id非自增 模型取回为0 的问题
Oct 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
js替代copy(示例代码)
2013/11/27 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
利用babel将es6语法转es5的简单示例
2017/12/01 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
python重试装饰器示例
2014/02/11 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
python命令行参数用法实例分析
2019/06/25 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
Django Rest framework权限的详细用法
2019/07/25 Python
python通过实例讲解反射机制
2019/10/17 Python
python求绝对值的三种方法小结
2019/12/04 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
HTML5的语法变化介绍
2013/08/13 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
服装仓管员岗位职责
2014/06/17 职场文书
cf战队收人口号
2014/06/21 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
年度考核表个人总结
2015/03/06 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android