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 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
PHP反射机制用法实例
Aug 28 PHP
PHP闭包实例解析
Sep 08 PHP
如何实现php图片等比例缩放
Jul 28 PHP
PHP MPDF中文乱码的解决方式
Dec 08 PHP
php自动载入类用法实例分析
Jun 24 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
实例讲解PHP表单处理
Feb 15 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
python字典DICT类型合并详解
2017/08/17 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
pytorch梯度剪裁方式
2020/02/04 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
what is the difference between ext2 and ext3
2013/11/03 面试题
应届毕业生如何写求职信
2014/02/16 职场文书
学校火灾防控方案
2014/06/09 职场文书
师范类求职信
2014/06/21 职场文书
标准单位租车协议书
2014/09/23 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js