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脚本的10个技巧(1)
Oct 09 PHP
php判断变量类型常用方法
Apr 24 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
php查看网页源代码的方法
Mar 13 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
php限制文件下载速度的代码
Oct 20 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
浅谈laravel aliases别名的原理
Oct 24 PHP
CI框架简单分页类用法示例
Jun 06 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/11 无线电
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP使用PDO连接ACCESS数据库
2015/03/05 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JavaScript简介
2015/02/15 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python交互式图形编程实例(二)
2017/11/17 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
Python生成词云的实现代码
2020/01/14 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
解决pip install psycopg2出错问题
2020/07/09 Python
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
运动会加油稿20字
2014/11/15 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
正规借条模板
2015/05/26 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
教师读书笔记
2015/06/29 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
请假条应该怎么写?
2019/06/24 职场文书
python基础之文件操作
2021/10/24 Python