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中Session的概念
Oct 09 PHP
php中的数组操作函数整理
Aug 18 PHP
PHP 面向对象 final类与final方法
May 05 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
php parse_str() 函数的定义和用法
May 23 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
解决laravel session失效的问题
Oct 14 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
js传值 判断
2006/10/26 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python 字典dict使用介绍
2014/11/30 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
python实现自动更换ip的方法
2015/05/05 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Numpy之文件存取的示例代码
2018/08/03 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python super()函数的基本使用
2020/09/10 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
北京华建集团SQL面试题
2014/06/03 面试题
表彰先进集体通报
2014/01/12 职场文书
《学会待客》教学反思
2014/02/22 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
《将心比心》教学反思
2014/04/08 职场文书
好的旅游活动方案
2014/08/19 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
行政处罚告知书
2015/07/01 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
HTML5页面打开微信小程序功能实现
2022/09/23 HTML / CSS