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 相关文章推荐
实现“上一页”和“下一页按钮
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
php自定义分页类完整实例
Dec 25 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
php微信公众号开发之音乐信息
Oct 20 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生成静态页面详解
2006/11/19 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
js实现简单的日历显示效果函数示例
2019/11/25 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
Python单例模式实例分析
2015/01/14 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python类的继承实例详解
2017/03/30 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Python字符串的修改方法实例
2019/12/19 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
jupyter notebook实现显示行号
2020/04/13 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
护士演讲稿范文
2014/01/05 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
财务部会计岗位职责
2015/02/03 职场文书
教师创先争优承诺书
2015/04/27 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
golang 语言中错误处理机制
2021/08/30 Golang