利用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
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
Php注入点构造代码
Jun 14 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP7匿名类用法分析
Sep 26 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
laravel使用Faker数据填充的实现方法
Apr 12 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 高手之路(一)
2006/10/09 PHP
php数组总结篇(一)
2008/09/30 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
Javascript中神奇的this
2016/01/20 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
JavaScript类的写法
2016/09/17 Javascript
AngularJS 应用身份认证的技巧总结
2016/11/07 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
python引用(import)某个模块提示没找到对应模块的解决方法
2019/01/19 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
Python如何重新加载模块
2020/07/29 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
容易被忽略的Python内置类型
2020/09/03 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
为什么要用EJB
2014/04/17 面试题
简短的公司员工自我评价分享
2013/11/13 职场文书
亲属关系公证书
2014/04/08 职场文书
大学生简短的自我评价
2014/09/12 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书
自主招生自荐信格式
2015/03/04 职场文书
超级礼物观后感
2015/06/15 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android