基于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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
关于PHP语言构造器介绍
Jul 08 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
基于PHP制作验证码
Oct 12 PHP
利用php做服务器和web前端的界面进行交互
Oct 31 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 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新手上路(十)
2006/10/09 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
jQuery MD5加密实现代码
2010/03/15 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
Vuex提升学习篇
2018/01/11 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Python中的exec、eval使用实例
2014/09/23 Python
初步认识Python中的列表与位运算符
2015/10/12 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
竞选大队长演讲稿
2014/04/29 职场文书
保研推荐信
2014/05/09 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS