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 相关文章推荐
在IIS上安装PHP4.0正式版
Oct 09 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
php 缓存函数代码
Aug 27 PHP
PHP HTML代码串截取代码
Dec 29 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
PHP间隔一段时间执行代码的方法
Dec 02 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
Laravel5.1框架路由分组用法实例分析
Jan 04 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生成唯一订单号的方法汇总
2015/04/16 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
使用typescript构建Vue应用的实现
2019/08/26 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
基于vue+echarts 数据可视化大屏展示的方法示例
2020/03/09 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
如何用python整理附件
2018/05/13 Python
Python实现全排列的打印
2018/08/18 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
消防安全员岗位职责
2014/03/10 职场文书
个人专业技术总结
2015/03/05 职场文书
重温入党誓词主持词
2015/06/29 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
Vue.Draggable实现交换位置
2022/04/07 Vue.js
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript