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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
无数据库的详细域名查询程序PHP版(2)
Oct 09 PHP
JS实现php的伪分页
May 25 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
php实现将Session写入数据库
Jul 26 PHP
php连接oracle数据库的核心步骤
May 26 PHP
基于PHP生成简单的验证码
Jun 01 PHP
php处理带有中文URL的方法
Jul 11 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 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五种设计模式小结
2011/03/23 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
各种常用的JS函数整理
2013/10/25 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jquery密码强度校验
2015/12/02 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
python文件与目录操作实例详解
2016/02/22 Python
Python中optparser库用法实例详解
2018/01/26 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
对pandas处理json数据的方法详解
2019/02/08 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
酒店端午节活动方案
2014/08/26 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers