利用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之字符串变相相减的代码
Mar 19 PHP
PHP MSSQL 存储过程的方法
Dec 24 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
php数字转汉字代码(算法)
Oct 08 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
PHP模块化安装教程
Jun 01 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
thinkphp 验证码 的使用小结
May 07 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
PHP RabbitMQ消息列队
May 11 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python2.7实现爬虫网页数据
2018/05/25 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
.NET概念性的面试题
2012/02/29 面试题
质检的岗位职责
2013/11/17 职场文书
幼师求职信
2014/06/23 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
幽默导游词开场白
2015/05/29 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
浅析Django接口版本控制
2021/06/26 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers