基于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 相关文章推荐
如何将数据从文本导入到mysql
Oct 09 PHP
php的字符串用法小结
Jun 08 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
Sep 13 PHP
php实现文件下载更能介绍
Nov 23 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 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 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
javascript实现分栏显示小技巧附图
2014/10/13 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
js实现密码强度检验
2017/01/15 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
js实现简单扫雷
2020/11/27 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
Python 类的继承实例详解
2017/03/25 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python的UTC时间转换讲解
2019/02/26 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
EJB timer的种类
2014/10/28 面试题
大学毕业生求职自荐信
2014/02/20 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
岳庙导游词
2015/02/04 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年中学校长工作总结
2015/05/19 职场文书