// 如果有HTTP_X_WAP_PROFILE则一定是移动设备

if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {

return true;

}复制代码

分析:

通过获到客户端返回的HTTP_X_WAP_PROFILE信息,可以判断一定是手机终端,但是并不是所有手机都能返回这个信息,这个和等下的获取via是一样的,这涉及到终端和服务商问题!

代码:

//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息

if(isset($_SERVER['HTTP_VIA']))

{

//找不到为flase,否则为true

return stristr($_SERVER['HTTP_VIA'],"wap") ? true : false;

}复制代码

分析:

这个HTTP_VIA里面,包含有服务商提供一些个人信息,如果由这个去判断是最为准确的,但是比如说移动就屏蔽了这个信息。因此,只对部分服务商有效。

代码:

//脑残法,判断手机发送的客户端标志,兼容性有待提高

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;

}

}复制代码

分析:

这个通过客户端返回信息[HTTP_USER_AGENT]来配置手机终端关键字。试想下,要列出所有的手机标识,才能准确判断,这个可行吗?所以,只要列举主流的手机品牌,这样就基本上OK了。不过,上在的代码有一个是判断ucweb的,这个是判断不了的。

因为,我获取到的信息和获取firefox的信息是一致的,也找不到ucweb的关键字。

所以使用ucweb浏览器就无法进行判断,有待新方法出现。

毕竟,ucweb占用绝大部分用户,但是ucweb是以pc浏览器标准靠拢的,因些被误认为是pc浏览器也可以吧!

代码:

//协议法,因为有可能不准确,放到最后判断

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;

}

}复制代码

分析:

最后就是协议,也不是什么协议了。就是mime类型判断,只接收wml页面的手机,不用说一定是移动终端,但是这么天真的想法是不可能的。因为,现在手机都渐渐可以和电脑的功能接近了!?浏览器上可接受的页面类型也不只是wml,html也同样支持。接收wml排在html前面,这个可以说也是手机,但不是绝对。比如说,蓝莓就是html排在前,wml排在后面。这样就无法做出判断了。

综上所述,就写出下面的php判断页面程序。

/**

*程 序:iswap.php判断是否是通过手机访问

*程序返回:@return bool 是否是移动设备

*/

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;

}

?>复制代码

php 判断wap,php判断是否wap手机客户端的方法详解相关推荐

  1. php发牌判断哪个玩家对子多,PHP判断一个数组是另一个数组子集的方法详解

    本文实例讲述了PHP判断一个数组是另一个数组子集的方法.分享给大家供大家参考,具体如下: 前言 今天完成一个算法的过程中,有几个需求模块,其中就有判断$a数组是否是$b数组的子集,可能最近我写c比较多 ...

  2. 手机人人java_人人网JAVA版手机客户端软件功能详解

    [IT168 软件频道]首先,安装好人人网的JAVA版本软件后,在手机的应用程序中可以找到人人2009(如图1). 图1 登录:运行人人2009软件,即会进入登录界面(如图2),点击登录,输入你的人人 ...

  3. python判断输入数字大于0,对python 判断数字是否小于0的方法详解

    对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16  或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...

  4. 华为手机摄影从入门到精通_最全的华为手机摄影教程~最全的手机相机使用方法详解...

    华为的手机拍摄功能什么高像素啊,双摄像头啊这些优势在此不做陈述,主要介绍一下它强大各种功能如何应用. 把手机摄影的拍摄模式分为三类常规拍摄.自拍模式.专业模式. 常规拍摄:即打开相机的首界面直接进行的 ...

  5. 关于《J2ME手机游戏开发技术详解》的问题!

    这里只是对我书中的bug和没有说明白的技术处说明,对于具体的编程问题,我只是点到为止! 对于3D部分的问题,由于我现在工作重点不在这上面,有些问题的回答我感到吃力,也不太想回答,详情请看我的文章. 我 ...

  6. android开发者选项打开方式,打开、关闭安卓手机的开发者选项的方法详解

    现在使用安卓手机的用户人群很多,大家都知道安卓手机中的"开发人员选项"吧,最近,有用户在问如何关闭或者打开开发者选项.那么小编今天就给大家带来一个打开.关闭安卓手机的开发者选项的方 ...

  7. 使用python代码给手机发短信详解(twilio的使用)

    ☞☞☞点击查看更多优秀Python博客☜☜☜ 使用python代码给手机发短信详解 twilio网页注册 实现代码 效果演示 ==**文章导航:==** 使用python代码给手机发送短信,在这里给大 ...

  8. android系统的手机文件夹目录详解

    android系统的手机文件夹目录详解 一.文件夹 1./acct/     系统回收站,删除的系统文件. 2./cache/     缓存 3. /data/      用户的所有程序相关数据   ...

  9. Android之手机文件夹目录详解

    android系统的手机文件夹目录详解 一.文件夹 1./acct/    系统回收站,删除的系统文件. 2./cache/    缓存 3./data/    用户的所有程序相关数据 app/    ...

最新文章

  1. Bzoj2337:[HNOI2011]XOR和路径
  2. 在GridView中如何格式化Money型字段?
  3. python sanic_sanic中文文档
  4. 虚拟内存,虚拟地址空间,用户空间,内核空间
  5. mysql设置常用——修改大小写、设置sql_mode不支持功能、
  6. Elasticsearch中如何进行日期(数值)范围查询
  7. 怎么把路由的#号去掉_VLAN应用篇系列:交换机VLAN间路由与传统单臂路由(子接口)方式...
  8. php7.1 集成php fpm,LNMP建站教程(2):安装 PHP 7.1 与 PHP7.1-FPM以及与Nginx集成
  9. 我用wget下载CentOS镜像文件
  10. Linux C语言解析并显示.bmp格式图片
  11. 程序员进阶之路的10本必读书目
  12. 猴子搬香蕉 php,猴子搬香蕉
  13. 如何给客户做产品培训
  14. 可以在保利威视后台查看自己开发CMS系统帐号看了某个视频多长时间
  15. 旧电脑怎么升级到新版Win10
  16. 树莓派-从入手到使用(一):树莓派入手操作第一步
  17. C语言练习,利用求阶乘函数Fact(),编程计算并输出从1到n之间所有数的阶乘值。
  18. 有限自动机和右线性文法笔记
  19. 3dmax制作三维地形图
  20. 腾讯视频qlv转mp4

热门文章

  1. P1396 营救(并查集+二分)
  2. hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
  3. Makefile 中:= ?= += =的差别 和条件运行
  4. ajax 动态加载的内容,相应的js也要在回调里加载
  5. MongoDB官方C#驱动中查询条件Query用法
  6. Spring Boot 菜鸟教程 application.properties 常用配置
  7. (转) Arcgis for Javascript实现两个地图的联动
  8. 静默安装oracle后,启动oem报错,解决方法!
  9. 笨办法学 Python · 续 练习 9:`sed`
  10. Quartz+SpringMVC实现web定时管理任务