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控制网页过期时间的代码
Sep 28 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
PHP curl 并发最佳实践代码分享
Sep 05 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
php使用百度翻译api示例分享
Jan 31 PHP
PHP中实现Bloom Filter算法
Mar 30 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
统计PHP目录中的文件数方法
Mar 05 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
thinkphp缓存技术详解
2014/12/09 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
Mac 上切换Python多版本
2017/06/17 Python
python机器学习之神经网络(二)
2017/12/20 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
TensorFlow实现模型评估
2018/09/07 Python
Django工程的分层结构详解
2019/07/18 Python
python实现飞船大战
2020/04/24 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
网络安全方面的面试题
2015/11/04 面试题
数控技术学生的自我评价
2014/02/15 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
保险内勤岗位职责
2014/04/05 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
“5.12”护士节主持词
2015/07/04 职场文书