php网站判断用户是否是手机访问的方法


Posted in PHP onNovember 01, 2013

随着移动设备的普及,网站也会迎来越来越多移动设备的访问。用适应PC的页面,很多时候对手机用户不友好,那么有些时候,我们需要判断用户是否用手机访问,如果是手机的话,就跳转到指定的手机友好页面。这里就介绍一下,如何判断用户是否用手机访问。

自定义的函数如下:

$agent = check_wap();
if( $agent )
{
  header('Location: https://3water.com');
  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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
php 类自动载入的方法
Jun 03 PHP
PHP数组实例详解
Jun 26 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
PHP运行模式汇总
Nov 06 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
详解php实现页面静态化原理
Jun 21 PHP
php合并js请求的例子
Nov 01 #PHP
php上传文件中文文件名乱码的解决方法
Nov 01 #PHP
PHP防止跨域提交表单
Nov 01 #PHP
PHP查询网站的PR值
Oct 30 #PHP
PHP禁止个别IP访问网站
Oct 30 #PHP
php cURL和Rolling cURL并发方式比较
Oct 30 #PHP
使用PHP Socket写的POP3类
Oct 30 #PHP
You might like
PHP实现变色验证码实例
2014/01/06 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
js代码实现微博导航栏
2015/07/30 PHP
twig模板常用语句实例小结
2016/02/04 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js自定义事件代码说明
2011/01/31 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
2016/08/05 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Python简单读取json文件功能示例
2017/11/30 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
python实现Decorator模式实例代码
2018/02/09 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
Python读取YAML文件过程详解
2019/12/30 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
文明餐桌行动实施方案
2014/02/19 职场文书
微信营销策划方案
2014/02/24 职场文书
出生公证委托书
2014/04/03 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js