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 相关文章推荐
PHP5 面向对象程序设计
Feb 13 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
PHP的5个安全措施小结
Jul 17 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php中socket通信机制实例详解
Jan 03 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
js实现小星星游戏
2020/03/23 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
python验证码图片处理(二值化)
2019/11/01 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Python调用飞书发送消息的示例
2020/11/10 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
遗体告别仪式主持词
2014/03/20 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android