本文主要介绍的是PHP判断客户端是PC端还是移动手机端方法,可以方便网站用于统计,需要了解的朋友可以参考一下。

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

}

方法二:

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实现判断客户端类型相关推荐

  1. socket java 客户端_Java基于socket实现的客户端和服务端通信功能完整实例

    本文实例讲述了Java基于socket实现的客户端和服务端通信功能.分享给大家供大家参考,具体如下: 以下代码参考马士兵的聊天项目,先运行ChatServer.java实现端口监听,然后再运行Chat ...

  2. 基于java的ftp客户端_基于Java的FTP客户端软件的设计

    基于的FTP客户端软件的设计(含选题审批表,任务书,开题报告,中期检查表,毕业论文8600字,答辩记录) 摘 要:FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中 ...

  3. 基于发起源判断CSRF***的方法

    我们要利用一个CSRF漏洞去***的时候,常会在第三方站点使用资源请求的方式加载存在漏洞的CSRF接口,当用户访问这个页面的时候就会偷偷的发送http request到漏洞站点,即***成功.实例利用 ...

  4. java 判断文件的类型,用java流方式判断文件类型

    这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...

  5. .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度...

    .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度 随机颜色在日常开发中很常用到,有时候要控制颜色明亮度,比如在白色背景网页上的随机颜色,一般要求颜色稍微暗一些, ...

  6. [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断

    参考:http://blog.csdn.net/beyondhaven/article/details/4204345 参考:http://blog.csdn.net/joeblackzqq/arti ...

  7. c++类模板及参数类型的运行时判断

    /*C++类模板及参数类型的运行时判断(typeid) */#include <stdio.h> #include <typeinfo> #include <vector ...

  8. java方法重载两个数相加_java方法重载实验:判断键盘输入的两个数据的类型后进行比较...

    实验内容: 使用java语言编程,实现键盘录入两个数据,比较两个数是否相等(采用方法调用方式),输出比较结果: 提高:对实现数字比较的方法进行重载,使之适应int.float.double.short ...

  9. 为什么包装类型间的相等判断应该用 equals

    为什么包装类型间的相等判断应该用 equals 大家都知道 java 中 == 和 equal 的区别, == 操作比较的是两个变量的值,对于引用型变量是判断变量是否指向同一引用对象,比地址. equ ...

  10. 基于模糊互补判断矩阵的多属性决策方法及matlab应用

    决策者利用一定的标度对属性进行两两比较,并构造判断矩阵,然后按一定的排序方法计算判断矩阵的排序向量,从而获得属性权重,最后在根据各种算子进行多属性群决策. (一)模糊互补判断矩阵排序法 1.加型模糊互 ...

最新文章

  1. java虚拟机线程调优与底层原理分析_Java并发编程——多线程的底层原理
  2. es dsl java api_ElasticSearch 系列 - RestFulAPI(DSL)
  3. 一文搞懂select语句在MySQL中的执行流程!
  4. java将030A转换为方块_JAVA试题
  5. vs mono linux,[.NET][C#.NET]走跳在Linux的人生(八).NET Core与Mono执行
  6. 常用雷达信号的matlab仿真_常用的雷达信号:基于DDS的线性调频信号的产生
  7. 学习心得_【数字建行大学学习心得】第二期
  8. python的类中包含什么_Python中的类(中)
  9. [转载][HASS.IO] 【HASSOS安装】成功安装HASSOS 1.9(避开了大部分坑版)
  10. FP-Growth算法
  11. 编程基本功:注释不是工作的一部分,是程序员赠送给公司的
  12. 最新版vmWare的安装后如何新建虚拟机
  13. synchronized工作原理剖析(一)
  14. Python读取罗技G29数据
  15. 对粒子滤波算法的理解 特别通俗易懂
  16. java数字转中文_java阿拉伯数字转中文数字
  17. sql CASE WEN 函数
  18. 在 100% 鲜活的时间,请让我遇见你
  19. 生物信息学反卷积论文阅读
  20. PMBOK(第六版) 学习笔记 ——《第五章 项目范围管理》

热门文章

  1. android源码中国地图,Android 绘制中国地图
  2. Alexa排名 介绍
  3. c 语言ifelse语句的用法,C 语言 if...else 语句
  4. Premiere Pro CC2017软件安装资料及教程
  5. 服务器如何取得系统管理员权限,技巧:Windows系统如何获得管理员权限?
  6. 部署Exchange 2010
  7. 【华为机试题】华为机试真题附解答(2020.9.16/c++)
  8. 《自己动手写网络爬虫》笔记3-宽度优先遍历互联网
  9. python3 利用Instaloader下载instagram数据示例
  10. 基于Python网络爬虫的设计与实现毕业设计