利用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 at(@)符号的用法简介
Jul 11 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
网页上facebook分享功能具体实现
Jan 26 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP实现PDO操作mysql存储过程示例
Feb 13 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 PHP
PHP单元测试配置与使用方法详解
Dec 27 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中使用url传递数组的方法
2015/02/11 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python的文件操作方法汇总
2017/11/10 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
医院辞职信范文
2014/01/17 职场文书
财务总经理岗位职责
2014/02/16 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
社区志愿者培训方案
2014/06/10 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
2019通用版新员工入职培训方案!
2019/07/11 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫