php判断用户是否手机访问代码


Posted in PHP onJune 08, 2015

随着移动设备的普及,网站也会迎来越来越多移动设备的访问。用适应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; 
}

再给大家分享一个个人使用的

function isPhone() {
  // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
    return true;
  }
  //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  if (isset($_SERVER['HTTP_VIA'])) {
    //找不到为flase,否则为true
    if(stristr($_SERVER['HTTP_VIA'], "wap"))
    {
      return true;
    }
  }
  //脑残法,判断手机发送的客户端标志,兼容性有待提高
  if (isset($_SERVER['HTTP_USER_AGENT'])) {
    $clientkeywords = array (
      'nokia',
      'sony',
      'ericsson',
      'mot',
      'samsung',
      'htc',
      'sgh',
      'lg',
      'sharp',
      'sie-',
      'philips',
      'panasonic',
      'alcatel',
      'lenovo',
      'iphone',
      'ipod',
      'blackberry',
      'meizu',
      'android',
      'netfront',
      'symbian',
      'ucweb',
      'windowsce',
      'palm',
      'operamini',
      'operamobi',
      'openwave',
      'nexusone',
      'cldc',
      'midp',
      'wap',
      'mobile',
      'phone',
    );
    // 从HTTP_USER_AGENT中查找手机浏览器的关键字
    if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
      return true;
    }
  }
  //协议法,因为有可能不准确,放到最后判断
  if (isset($_SERVER['HTTP_ACCEPT'])) {
    // 如果只支持wml并且不支持html那一定是移动设备
    // 如果支持wml和html但是wml在html之前则是移动设备
    if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
      return true;
    }
  }
  return false;
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP在XP下IIS和Apache2服务器上的安装
Sep 05 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
PHP simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
php修改时间格式的代码
May 29 PHP
初品cakephp 入门基础
Feb 16 PHP
PHP安全上传图片的方法
Mar 21 PHP
php中define用法实例
Jul 30 PHP
php简单获取复选框值的方法
May 11 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
浅谈PHP中Stream(流)
Jun 08 #PHP
php实现有趣的人品测试程序实例
Jun 08 #PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 #PHP
php查询whois信息的方法
Jun 08 #PHP
Yii获取当前url和域名的方法
Jun 08 #PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 #PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 #PHP
You might like
php Mysql日期和时间函数集合
2007/11/16 PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
ucenter通信原理分析
2015/01/09 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
jquery实现div阴影效果示例代码
2013/09/16 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
JavaScript和jQuery制作光棒效果
2017/02/24 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
vue学习教程之带你一步步详细解析vue-cli
2017/12/26 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
HTML5实现预览本地图片
2016/02/17 HTML / CSS
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
医大实习自我鉴定
2013/12/07 职场文书
简历中的自我评价范文
2014/02/05 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
师恩难忘教学反思
2014/04/27 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
暑假生活随笔
2015/08/15 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS