利用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调用数据库的存贮过程!
Oct 09 PHP
织梦模板标记简介
Mar 11 PHP
php中用文本文件做数据库的实现方法
Mar 27 PHP
PHP 实用代码收集
Jan 22 PHP
深入解析php之sphinx
May 15 PHP
8个必备的PHP功能实例代码
Oct 27 PHP
调整PHP的性能
Oct 30 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
Dec 25 PHP
php中strtotime函数性能分析
Nov 20 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 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和XSS跨站攻击的防范
2007/04/17 PHP
php笔记之常用文件操作
2010/10/12 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
2019/01/24 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python字符遍历的艺术
2008/09/06 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
彻底理解Python中的yield关键字
2019/04/01 Python
如何基于python操作excel并获取内容
2019/12/24 Python
基于python图像处理API的使用示例
2020/04/03 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
毕业生自荐书模版
2014/01/04 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript