TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架

手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名
首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和config_wap.php

config.php 中:

  1. return array(
  2.     'DEFAULT_MODULE'=>'Index',
  3.     'DEFAULT_CONTROLLER'=>'Index',
  4.     'DEFAULT_ACTION'=>'index',
  5. )
复制代码

config_wap.php 中:

  1. return array(
  2.     'DEFAULT_MODULE'=>'Wap',
  3.     'DEFAULT_CONTROLLER'=>'Index',
  4.     'DEFAULT_ACTION'=>'index',
  5. )
复制代码

然后在入口文件 index.php 中加入手机端判断方法(建议放到最下面):

  1. function is_mobile_request(){
  2.     $_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ? $_SERVER['ALL_HTTP'] : '';
  3.     $mobile_browser = '0';
  4.     if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower($_SERVER['HTTP_USER_AGENT'])))
  5.         $mobile_browser++;
  6.     if((isset($_SERVER['HTTP_ACCEPT'])) and (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false))
  7.         $mobile_browser++;
  8.     if(isset($_SERVER['HTTP_X_WAP_PROFILE']))
  9.         $mobile_browser++;
  10.     if(isset($_SERVER['HTTP_PROFILE']))
  11.         $mobile_browser++;
  12.         $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
  13.         $mobile_agents = array(
  14.             'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
  15.             'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
  16.             'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
  17.             'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
  18.             'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
  19.             'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
  20.             'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
  21.             'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
  22.             'wapr','webc','winw','winw','xda','xda-'
  23.         );
  24.      if(in_array($mobile_ua, $mobile_agents))
  25.           $mobile_browser++;
  26.      if(strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false)
  27.           $mobile_browser++;
  28.      // Pre-final check to reset everything if the user is on Windows  
  29.      if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows') !== false)
  30.           $mobile_browser=0;
  31.      // But WP7 is also Windows, with a slightly different characteristic  
  32.      if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'windows phone') !== false)
  33.           $mobile_browser++;
  34.      if($mobile_browser>0)  
  35.           return true;
  36.      else
  37.           return false;
  38. }
复制代码

然后,我们开始用关键的APP_STATUS来调用不同的模块:
在index.php文件中的21行后面也就是“定义应用目录”结束后,加入代码:

  1. if(is_mobile_request()){
  2.     define('APP_STATUS','config_wap');
  3. }else{
  4.     define('APP_STATUS','Index');
  5. }
复制代码

大功告成。
参考文档:http://document.thinkphp.cn/manual_3_2.html#load_config


【推广】 【选型推荐】0基础1小时建站,满足多种建站需求
【推广】 ThinkPHP5.0 入门必读系列 [ 官方出品 ]

转载于:https://www.cnblogs.com/wzjwffg/p/9883845.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

request获取url的参数编码问题

1、设为utf-8编码 request.getParameter("Params")).getBytes("iso-8859-1"), "utf-8" ) 2、防止参数为null的情况, str null ? "" : str; 3、编解码问题 https://blog.csdn.net/farxix/article/details/78055469

python中前后端通信方法Ajax和ORM映射(form表单提交)

后端从数据库获取数据给到前端: 第一种方式: admin.py文件代码: admin.route(/showList) def show():# 获取数据库所有文章数据,得到一个个对象resArticle.query.all()dicts[]# 将每一个对象转成字典并加入一个列表,再…

java异常代码分析

觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out ... 2 java.sql.Connection conn ... 3 try { // ⑸ 4  Statement…

NetworkManager

NetworkManager NetworkManager是一个组件,用来管理网络多人游戏的状态。 NetworkManager所具备的属性包括如下: 游戏状态管理派生管理场景管理Debugging信息比赛选择(Matchmaker)用户自定义使用NetworkManager NetworkManager可以作为核心控…

C#知识点总结系列:3、C#中Delegate和Event

一、Delegate委托可以理解为一个方法签名。 可以将方法作为另外一个方法的参数带入其中进行运算。在C#中我们有三种方式去创建委托,分别如下: public delegate void Print(string str);static void delegatemethod(string str){Console.WriteLine(str);}…

js获得7天后的日期时间

思路:当前日期天数7 直接上代码: function getSpecialTime() {var currentDate;var arry currentDate.split("-");var year parseInt(arry[0],10);var month parseInt(arry[1],10);var day parseInt(arry[2],10); //月份的方法&#xff…

python的2种字符串格式化输出

字符串格式化代码(typecode) 法一: %格式使用下面的格式 %[(name)] [flags] [width][.precision] typecode (name)输出字典的value使用,这里的name是字典的key(实际指定时,必须有外面的圆括号) …

JS弹出DIV并使整个页面背景变暗功能的实现代码

1.首先写一个遮罩层div&#xff0c;然后再写一个弹窗的div <!-- 遮罩层 --> <div id"cover" style"background: #000; position: absolute; left: 0px; top: 0px; width: 100%; filter: alpha(opacity30); opacity: 0.3; display: none; z-index: 2 &…

dos命令测试网络连通情况

telnet测试端口命令&#xff1a; telnet IP地址 端口号 或者 telnet 域名 端口号traceroute指令让你追踪网络数据包的路由途径&#xff0c;命令&#xff1a; traceroute ip地址

Python中字典合并的四种方法

字典是Python语言中唯一的映射类型。映射类型对象里哈希值&#xff08;键&#xff0c;key&#xff09;和指向的对象&#xff08;值&#xff0c;value&#xff09;是一对多的的关系&#xff0c;通常被认为是可变的哈希表。字典对象是可变的&#xff0c;它是一个容器类型&#xf…

jar包打开闪退

第一种方法&#xff1a; 步骤一&#xff1a;新建一个文本文档&#xff0c;输入内容"javaw -jar %1 "&#xff0c;并保存为批处理文件&#xff0c;例如"run.bat "。 步骤二&#xff1a;右键点击.jar格式的文件 &#xff0c;选择其打开方式 为上面建的run.ba…

从零开始的全栈工程师——js篇2.12(面向对象)

面向对象 Js一开始就是写网页特效&#xff0c;面向过程的&#xff0c;作者发现这样写不好&#xff0c;代码重复利用率太高&#xff0c;计算机内存消耗太大&#xff0c;网页性能很差。 所以作者就收到java和c的影响&#xff0c;往面向对象靠齐。Js天生有一个Object&#xff0c;但…

java,js获取数组最大/小值

js最小值&#xff1a; var minValue Math.min.apply(null,args[]);js最大值 var maxValue Math.max.apply(null,args[]);JDK8特性&#xff1a;java最大值&#xff08;整数数组&#xff09;&#xff1a; int[] A {6,7,8,2,1,3,4,5}; int maxVal Arrays.stream(A).max().g…

20172332 2017-2018-2 《程序设计与数据结构》第七周学习总结

20172332 2017-2018-2 《程序设计与数据结构》第七周学习总结 教材学习内容总结 第十一章 二叉查找树 1.二叉查找树&#xff1a;一种带有附加属性的二叉树。即每个结点其左孩子都要小于其父结点&#xff0c;而父结点又小于或等于其右孩子。&#xff08;左孩子<父结点<右孩…

JAVA读取本地图片并展示

代码如下&#xff1a; //读取本地图片输入流 FileInputStream inStream new FileInputStream("D:/image/123.jpg");//byte数组用于存放图片字节数据 byte[] buff new byte[inSteam.available()];inStream.read(buff); inStream.close();//设置发送到客户端的响应内…

Java中map关于putAll()和“=”的区别

putAll()方法&#xff1a; 相同的key&#xff0c;map1.putAll(map2); map1中的key-value会被覆盖。 不同的key&#xff0c;map2中的key-value会被追加到map1中。“”的使用&#xff1a; map1 map2; map1中所有的key-value都会被map2中的key-value覆盖。

Neo4j简介

1、什么是Neo4j   Neo4j是由java实现的开源NOSQL图数据库   数据库分为关系型和非关系型两种类型。   其中非关系型又分为Graph(图形),Document(文档),Cloumn Family(列式)&#xff0c;以及Key-Value Store(KV),   这四种类型数据库分别使用不同的数据结构进行存储。因…

js比较日期大小

//获取当前时间 var currentTime new Date();//自定义时间 var customTime"2019-03-01 00:00:00"; customTime customTime.replace("-","/");//替换字符&#xff0c;变成标准格式 customTime new Date(Date.parse(customTime));if(currentT…

Docker-容器数据卷

docker容器数据卷相当于外置的移动硬盘 docker容器数据卷主要功能是&#xff1a;容器的持久化、容器间继承共享数据 特点&#xff1a; &#xff08;1&#xff09;数据卷可以容器之间共享或重用数据 &#xff08;2&#xff09;卷中更改可以直接生效 &#xff08;3&#xff09;数…

weblogic的输出打印日志设置

设置路径&#xff1a; 1、服务器——》控制&#xff0c;进入服务器设置 2、服务器启动——>设置参数 3、参数配置&#xff1a; -Xms2048m -Xmx4096m -XX:PermSize256m -XX:MaxPermSize512m -XX:UseConcMarkSweepGC -XX:CMSClassUnloadingEnabled -XX:DisableExplicitGC -…