基于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 相关文章推荐
PHP基础之运算符的使用方法
Apr 28 PHP
PHP5中Cookie与 Session使用详解
Apr 30 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
php以post形式发送xml的方法
Nov 04 PHP
php curl 上传文件代码实例
Apr 27 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
Sep 27 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 PHP
PHP中类与对象功能、用法实例解读
Mar 27 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实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
PHP可变变量学习小结
2015/11/29 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
accesskey 提交
2006/06/26 Javascript
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
JavaScript实现三级联动效果
2017/07/15 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
电子信息科学专业自荐信
2014/01/30 职场文书
女子职高个人自荐书
2014/02/01 职场文书
客户接待方案
2014/02/26 职场文书
合作意向协议书
2015/01/29 职场文书
Python&Matlab实现樱花的绘制
2022/04/07 Python