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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
php共享内存段示例分享
Jan 20 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP操作Redis数据库常用方法示例
Aug 25 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 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采集类Snoopy抓取图片实例
2014/06/19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
2016/03/18 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
js+SVG实现动态时钟效果
2018/07/14 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
python正则分组的应用
2013/11/10 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
Python中的下划线详解
2015/06/24 Python
理解python中生成器用法
2017/12/20 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Django model反向关联名称的方法
2018/12/15 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
民事撤诉申请书范本
2015/05/18 职场文书
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers