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自动适应范围的分页代码
Aug 05 PHP
php 抽象类的简单应用
Sep 06 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
php抓取页面的几种方法详解
Jun 17 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
PHP实现视频文件上传完整实例
Aug 28 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
php字符串函数学习之substr()
Mar 27 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
浅析Python中signal包的使用
2015/11/13 Python
Python机器学习之决策树算法
2017/12/22 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
Python常用类型转换实现代码实例
2020/07/28 Python
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
GWebs公司笔试题
2012/05/04 面试题
六年级数学教学反思
2014/02/03 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
小班上学期评语
2014/05/05 职场文书
银行金融服务方案
2014/06/11 职场文书
五心教育心得体会
2014/09/04 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
MySQL限制查询和数据排序介绍
2022/03/25 MySQL