本文主要介绍的是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;

}

方法二:<?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判断客户端的类型相关推荐

  1. android 判断是否有网络连接,判断网络连接类型

    当App需要进行网络连接获取数据时,先进行判断是否有网络连接,并且对网络类型进行判断,可以有效地避免对用户造成不必要的困惑和损失. /** 判断是否有网络连接* @author tianjie* @r ...

  2. 数据类型的判断 --Object.prototype.toString.call(obj)精准检测对象类型

    数据类型的判断 typeof typeof返回一个表示数据类型的字符串,返回结果包括:number.boolean.string.symbol.object.undefined.function等7种 ...

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

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

  4. C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。

    1. 题目 编写函数:判断三角形的类型,并输出其面积和类型. 2.思路: 首先判断其两边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积:否则不 ...

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

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

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

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

  7. 如何判断Map中的key或value是什么类型

    对于某些从泛型(比如:Map<K, V>)中继承过来的数据,K可能是String.Integer.等等.如果需要map.get(key),得先确保key的类型跟map的K匹配. 对于key ...

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

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

  9. java中判断string类型的值_java判断对象是否是string类型

    1.instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:result = ...

  10. c语言如何判断数组不为空,PHP 判断数组是否为空的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在php中判断是否为数组很简单,php中利用is_array() 函数就可以快速判断变量是否为数组了.is_array - 检测变量是否是数组Report ...

最新文章

  1. 【优秀博文】知乎服务化的实践与思考
  2. 将Sublime Text 3设置为Python全栈开发环境
  3. SQL语言之数据定义语言(Oracle)
  4. python连接oracle数据库的方法_Python3.6连接Oracle数据库的方法详解
  5. 关于Xcode6编译变更 “Implicit declaration of function 'sysctl' is invalid in C99” 报错问题
  6. Hive内置运算函数,自定义函数(UDF)和Transform
  7. 蒙特卡洛模拟_蒙特卡洛模拟法求期权价值
  8. 老板啥都懂,还天天套路我?!
  9. gateway请求拦截_一种网关对用户请求进行统一拦截判断是否放行的方法与流程...
  10. 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行
  11. outlook可以显示多少行文本_Linux学习从处理文本开始
  12. UE4如何贴混合贴图_UE4_赛博朋克雨夜环境创作分享
  13. C# 处理excel 大全
  14. 用.Net MVC模式做Topjui后台,通过实现IModelBinder转换前端查询条件,实现前端动态查询...
  15. bxl类型封装转换为AD库封装
  16. vue3.2 lottie-web动画+引入json动画
  17. ubuntu20.04设置静态IP地址
  18. 如何创建属于自己的域名邮箱
  19. Android 清理大师产品的具体实现(一)QQ专清
  20. uni-app 页面跳转

热门文章

  1. .jks或者.keystore文件查看MD5、SHA-1和SHA-256
  2. 计算机导论国内外发展,计算机导论第一章计算机发展历程.ppt
  3. IBM服务器引导盘serverguide 下载
  4. android常用布局详解
  5. javascript gba游戏模拟器
  6. c语言贪吃蛇作业报告,贪吃蛇设计报告
  7. android wmv2格式视频,视频转换助手app下载
  8. java webservice 实例
  9. Arch LInux | 网络管理工具iproute2(网络接口、ip地址、路由表)
  10. 转载:技术大停滞——范式春梦中的地球工业文明7 寂静星空所隐含的恐怖前景