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中看实例学正则表达式
Dec 25 PHP
php实现utf-8和GB2312编码相互转换函数代码
Feb 07 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
php实现的双向队列类实例
Sep 24 PHP
php格式化金额函数分享
Feb 02 PHP
php实现的验证码文件类实例
Jun 18 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 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实现的下载css文件中的图片的代码
2010/02/08 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
旺旺在线客服代码 旺旺客服代码生成器
2018/01/09 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
Python ljust rjust center输出
2008/09/06 Python
python中readline判断文件读取结束的方法
2014/11/08 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python聊天室实例程序分享
2016/01/05 Python
Python中的函数作用域
2018/05/07 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
详解Pycharm第三方库的安装及使用方法
2020/12/29 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
庆国庆活动总结
2014/08/28 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
通知的写法
2015/04/23 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
SpringBoot详解执行过程
2022/07/15 Java/Android