基于php判断客户端类型


Posted in PHP onOctober 14, 2016

在网站用户数据统计的时候,我们经常需要获取用户浏览器的类型和操作系统的类型,本文主要介绍的是基于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;
} 
?>

判断手机端是IOS还是Android

代码如下:

/**
 * 判断是否手机访问
 */
function is_mobile()
{
  static $is_mobile;
  if (isset($is_mobile)) return $is_mobile;
  if (empty($_SERVER['HTTP_USER_AGENT'])) {
    $is_mobile = false;
  } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
    || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
    || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
    || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
    || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
    || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
    || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false
  ) {
    $is_mobile = true;
  } else {
    $is_mobile = false;
  }
  return $is_mobile;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
解析yii数据库的增删查改
Jun 20 PHP
使用PHP编写的SVN类
Jul 18 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php下Memcached入门实例解析
Jan 05 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
phpStorm+XDebug+chrome 配置详解
Apr 01 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 #PHP
php生成与读取excel文件
Oct 14 #PHP
基于PHP实现用户注册登录功能
Oct 14 #PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 #PHP
php车辆违章查询数据示例
Oct 14 #PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 #PHP
php+jQuery递归调用POST循环请求示例
Oct 14 #PHP
You might like
由php if 想到的些问题
2008/03/22 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
vue监听scroll的坑的解决方法
2017/09/07 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
python 项目目录结构设置
2020/02/14 Python
手把手教你用Django执行原生SQL的方法
2021/02/18 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
接待员岗位责任制
2014/02/10 职场文书
区级文明单位申报材料
2014/05/15 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
节水宣传标语口号
2015/12/26 职场文书
python办公自动化之excel的操作
2021/05/23 Python
Nginx下SSL证书安装部署步骤介绍
2021/12/06 Servers