基于php判断客户端类型

5年以前  |  阅读数:902 次  |  编程语言:PHP 

在网站用户数据统计的时候,我们经常需要获取用户浏览器的类型和操作系统的类型,本文主要介绍的是基于php判断客户端类型,有需要的朋友可以来了解一下。

方法一:


    /**
     * 
     * 根据php的$_SERVER['HTTP_USER_AGENT'] 中各种浏览器访问时所包含各个浏览器特定的字符串来判断是属于PC还是移动端
     * @author      discuz3x
     * @lastmodify  2014-04-09
     * @return BOOL
     */
    function checkmobile() {
     global $_G;
     $mobile = array();
    //各个触控浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
     static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
      'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
      'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
      'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
      'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
      'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
      'benq', 'haier', '^lct', '320x320', '240x320', '176x220');
    //window手机浏览器数组【猜的】
     static $mobilebrowser_list =array('windows phone');
    //wap浏览器中$_SERVER['HTTP_USER_AGENT']所包含的字符串数组
     static $wmlbrowser_list = array('cect', 'compal', 'ctl', 'lg', 'nec', 'tcl', 'alcatel', 'ericsson', 'bird', 'daxian', 'dbtel', 'eastcom',
      'pantech', 'dopod', 'philips', 'haier', 'konka', 'kejian', 'lenovo', 'benq', 'mot', 'soutec', 'nokia', 'sagem', 'sgh',
      'sed', 'capitel', 'panasonic', 'sonyericsson', 'sharp', 'amoi', 'panda', 'zte');
     $pad_list = array('pad', 'gt-p1000');
     $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
     if(dstrpos($useragent, $pad_list)) {
     return false;
     }
     if(($v = dstrpos($useragent, $mobilebrowser_list, true))){
     $_G['mobile'] = $v;
     return '1';
     }
     if(($v = dstrpos($useragent, $touchbrowser_list, true))){
     $_G['mobile'] = $v;
     return '2';
     }
     if(($v = dstrpos($useragent, $wmlbrowser_list))) {
     $_G['mobile'] = $v;
     return '3'; //wml版
     }
     $brower = array('mozilla', 'chrome', 'safari', 'opera', 'm3gate', 'winwap', 'openwave', 'myop');
     if(dstrpos($useragent, $brower)) return false;
     $_G['mobile'] = 'unknown';
    //对于未知类型的浏览器,通过$_GET['mobile']参数来决定是否是手机浏览器
     if(isset($_G['mobiletpl'][$_GET['mobile']])) {
     return true;
     } else {
     return false;
     }
    }
    /**
     * 判断$arr中元素字符串是否有出现在$string中
     * @param $string   $_SERVER['HTTP_USER_AGENT'] 
     * @param $arr     各中浏览器$_SERVER['HTTP_USER_AGENT']中必定会包含的字符串
     * @param $returnvalue 返回浏览器名称还是返回布尔值,true为返回浏览器名称,false为返回布尔值【默认】
     * @author      discuz3x
     * @lastmodify  2014-04-09
     */
    function dstrpos($string, $arr, $returnvalue = false) {
     if(empty($string)) return false;
     foreach((array)$arr as $v) {
     if(strpos($string, $v) !== false) {
      $return = $returnvalue ? $v : true;
      return $return;
     }
     }
     return false;
    }

方法二:


    <?php
    function isMobile()
    { 
      // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
      if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
      {
        return true;
      } 
      // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
      if (isset ($_SERVER['HTTP_VIA']))
      { 
        // 找不到为flase,否则为true
        return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
      } 
      // 脑残法,判断手机发送的客户端标志,兼容性有待提高
      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'
          ); 
        // 从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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例