利用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 相关文章推荐
杏林同学录(八)
Oct 09 PHP
由php if 想到的些问题
Mar 22 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
php查询内存信息操作示例
May 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
PHP5 面向对象程序设计
2008/02/13 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
[46:44]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第二场 3月7日
2021/03/11 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python 实现try重新执行
2019/12/21 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
个性发展自我评价
2014/02/11 职场文书
大家访活动实施方案
2014/03/10 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
社团活动总结报告
2014/06/27 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers