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 相关文章推荐
安装APACHE
Jan 15 PHP
基于initPHP的框架介绍
Apr 18 PHP
PHP Class&Object -- 解析PHP实现二叉树
Jun 25 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
PHP滚动日志的代码实现
Jun 10 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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
德生PL990的分析评价
2021/03/02 无线电
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
8个必备的PHP功能开发
2015/10/02 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
浅谈python中set使用
2016/06/30 Python
Python函数和模块的使用总结
2019/05/20 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
python 有效的括号的实现代码示例
2019/11/11 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
应用电子专业学生的自我评价
2013/10/16 职场文书
护士实习鉴定范文
2013/12/22 职场文书
校园安全广播稿
2014/02/08 职场文书
成本会计实训报告
2014/11/05 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang