利用PHP判断是手机移动端还是PC端访问的函数示例


Posted in PHP onDecember 14, 2017

前言

最近在开发项目的时候,分别开发了PC端和手机端,需要实现,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端网站,于是有了下面这个判断函数:

示例代码:

/**
 * 移动端判断
 */
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 isset 函数作用

isset函数是检测变量是否设置。

格式:bool isset ( mixed var [, mixed var [, ...]] )

返回值:

  • 若变量不存在则返回 FALSE
  • 若变量存在且其值为NULL,也返回 FALSE
  • 若变量存在且值不为NULL,则返回 TURE
  • 同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
  • 如果已经使用 unset() 释放了一个变量之后,它将不再是 isset() 。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("\0")并不等同于 PHP 的 NULL 常数。

警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。

<?php
$a = array ('test' => 1, 'hello' => NULL);
var_dump( isset ($a['test') ); // TRUE
var_dump( isset ($a['foo') ); // FALSE
var_dump( isset ($a['hello') ); // FALSE
// 'hello' 等于 NULL,所以被认为是未赋值的。
// 如果想检测 NULL 键值,可以试试下边的方法。
var_dump( array_key_exists('hello', $a) ); // TRUE
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php Rename 更改文件、文件夹名称
May 24 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 #PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 #PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 #PHP
实例分析PHP中PHPMailer发邮件
Dec 13 #PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 #PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 #PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 #PHP
You might like
php 缓存函数代码
2008/08/27 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP Header失效的原因分析及解决方法
2016/11/16 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
[04:44]DOTA2 2017全国高校联赛视频回顾
2017/08/21 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
高中生毕业自我鉴定范文
2013/12/22 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
工厂标语大全
2014/10/06 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
社会实践活动报告
2015/02/05 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
于丹论语心得观后感
2015/06/15 职场文书
小学体育教学随笔
2015/08/14 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android