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 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 PHP
php中的strpos使用示例
Feb 27 PHP
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
PHP中的traits简单使用实例
May 13 PHP
php提高网站效率的技巧
Sep 29 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
Laravel中Kafka的使用详解
Mar 24 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
一个显示天气预报的程序
2006/10/09 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
深入php内核之php in array
2015/11/10 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
浏览器缩放检测的js代码
2014/09/28 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
2018/01/13 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
python利用tkinter实现屏保
2019/07/30 Python
Django 自动生成api接口文档教程
2019/11/19 Python
python实现视频读取和转化图片
2019/12/10 Python
25道Java面试题集合
2013/05/21 面试题
教你怎样写好自我评价
2013/10/05 职场文书
市场部专员岗位职责
2013/11/30 职场文书
前台文员岗位职责
2013/12/28 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
2015年防汛工作总结
2015/05/15 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
python开发人人对战的五子棋小游戏
2022/05/02 Python