利用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 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
php读取xml实例代码
Jan 28 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
PHP加密解密实例分析
Dec 25 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
php中的抽象方法和抽象类
Feb 14 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP使用函数用法详解
Sep 30 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 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设计模式之单例模式使用示例
2014/01/20 PHP
PHP实现过滤各种HTML标签
2015/05/17 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
2013/01/23 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
vue实现文字加密功能
2019/09/27 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python之指数与E记法的区别详解
2019/11/21 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
Windows和Linux动态库应用异同
2016/04/17 面试题
实习期自我鉴定
2013/10/11 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
领导班子专题民主生活会情况想汇报
2014/09/30 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
演讲比赛主持词
2015/06/29 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
在 Python 中利用 Pool 进行多线程
2022/04/24 Python