PHP判断移动设备来源的方法

现在移动设备大热的年代,可能我们在做web前端开发的时候经常会需要用到对移动设备的页面匹配。当然我们可以用响应式页面设计来处理前端的匹配问题,但是响应式页面只是不显示某些代码,但是还是会加载到用户的移动设备中。为了更好的照顾到用户手机浏览的体验,减少不必要的加载。我们可以再通过PHP的方式来减少用户的代码加载,提高用户浏览页面时的体验。由于现在移动设备的种类繁多、而且浏览器五花八门,所以仅仅是通过User-Agent来判断已经不能完全解决问题了。

<?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;

}

?>

目前这个方法可以用于大多数的移动设备判断,使用时也可以根据需要自行添加一些UA的判断参数。

PHP判断移动设备来源的方法,布布扣,bubuko.com

时间: 2024-12-29 04:27:30

PHP判断移动设备来源的方法的相关文章

Android 判断当前设备是手机还是平板

Android开发需要适配手机和平板,有些需求实现时就要求判断设备是手机还是平板.网上很多说通过设备尺寸.DPI.版本号.是否具备电话功能等进行判断,不过都不算太精确.这里分享一个简洁给力的方法(官方用法): /** * 判断当前设备是手机还是平板,代码来自 Google I/O App for Android * @param context * @return 平板返回 True,手机返回 False */ public static boolean isPad(Context contex

巧妙使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的好方法

有无数的理由要求我们在任何时候都应该知道用户是使用的什么设备浏览我们的网站——宽屏,普通屏,平板,手机?知道这些特征,我们web应用的CSS和JavaScript才能同步做相应的操作.在给Mozilla Developer Networks改版设计的过程中,我发现使用CSS媒体查询(media queries)虽然非常的有效,但有时,JavaScript却不能及时知道用户浏览设备的状态.浏览网站的用户使用的是桌面电脑,还是平板,还是手机?这对于CSS来说很容易,但CSS却无法将这些信息告诉Jav

iOS 中判断当前设备的相机是否可用

在iOS 开发中,经常需要调用相机来扫描类似二维之类的东西,在调用之前,首先应该判断当前设备的相机是否可用: 下面直接上代码:(swift中的写法) 1 class WNCommonTool: NSObject { 2 /** 3 4 判断当前设备的相机是否可用 5 6 :returns: 当前设备的相机是否可用 7 8 */ 9 10 class func isCameraAvailable() -> Bool{ 11 12 return UIImagePickerController.isC

3.判断当前设备

#pragma mark 判断当前设备 #define IS_IPHONE4 (([[UIScreen mainScreen] bounds].size.height == 480) ? YES : NO) #define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height == 568) ? YES : NO) #define IS_IPhone6 (667 == [[UIScreen mainScreen] bounds].size

Android 查看 无wifi/usb设备的logcat方法

Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉,我需要调试一个USB设备这样也无法用usb来输出logcat. 因为这个USB设备需要内核驱动支持,因此无法在其它设备调试. 因此有的方法有,一般想到用蓝牙输出logcat,但这是Android wear 才支持的特性. 在代码中加入捕获错误和异常代码,写入sd卡,这个工作量较大,而且麻烦 二.简单的解决办法 1.安装Android Terminal 软件. 一个可用链接是 ht

(转)JavaScript中判断对象类型的种种方法

我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一个说明运算数类型的字符串.如:"number","string","boolean","object","function","undefined"(可用于判断变量是否存在). 但 type

Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数,需要的朋友可以参考下 $#代表了命令行的参数数量,可以看以下实例: 复制代码 代码如下: if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" exit 1; f

jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML.在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本.随后服务器端返回的数据会根据这个值解析后,传递给回调 函数.可用值: •"xml": 返回

Javascript判断文件是否存在的方法示例

分享下javascript判断文件是否存在的方法. 1,判断客户端文件时,可以用var fso,s=filespec; // filespec="C:/path/myfile.txt"fso=new ActiveXObject("Scripting.FileSystemObject");if(fso.FileExists(filespec))s+=" exists.";else // www.jbxue.coms+=" doesn't