对discuz的代码分析学习(二)首页文件
如果当前地址栏存在查询字符,并且是一个数字,条件成立。
查询字符:www.baidu.com/index.php?aaa=bbb aaa=bbb就是查询字符
如果条件成立,则把home赋值给$_ENV['curapp'] ; $_ENV可以理解为类似于$_GET的超全局数组。这里的$_ENV['curapp']可以理解为选中的入口文件。
并将一个数组传递给$_GET,数组的第一个成员指定了控制器名称,第二个成员制定了一个叫uid的参数,就是用户id。
如果这里的条件成立了,127行的IF语句必定为false,下面一大堆代码都不用执行,一直跳到137行,直接就加载入口文件。
如果第一个IF语句为false
cache_domain.php是系统生成的配置文件。$domain数组是在cache_domain.php文件中声明的。
如果$_ENV['domain']为空,直接将当前选中的应用设置为forum(论坛) ,然后跳到137行。
如果 $_ENV['domain']不为空
25:将当前主机域名按.号拆分为数组。
27:将获取到的域名从第一个.号后一位的位置截取,一直截取到末尾。例如www.baidu.com -> 被截之后 -> baidu.com
28:如果['domain']['app']不为空,并且是数组,并且当前访问的域名也是其数组值的一项。则:
30:在app数组中找到值为当前域名的键,作为选中的应用。比如当前访问的域名为www.baidu.com而且在app数组中找到了这一项:
那么$_ENV['curapp']的值就为home。
如果当前选中的应用是mobile(手机) ,$_ENV['curapp']重置为forum
如果当前选中的应用是default或者当前选中的应用在默认应用数组中不存在,则把当前选中的应用赋值为空。
37:这个条件会在设置根域名,并且当前访问的也是这个根域名之后成立。
44:这一行的条件不知道什么情况下会成立。搞了好几遍list数组始终为空。下面的IF语句也不会执行,暂时不清楚list数组干嘛用的。
74:如果当前访问的域名是二级域名,并且这个二级域名不是保留域名,这个条件就会成立,checkholdmain函数用来检查是否是保留域名。
75:获取域名前缀
76:获取根域名
77:加载框架入口文件
这一串代码看得出来是初始化操作。这些都是discuz_application类的属性。
85:这行代码会通过table_common_domain类查询数据库,找到根域名绑定的应用类型。fetch_by_domain_domainroot
如果应用类型为home如何如何,如果应用类型为group如何如何。
大致分析
对discuz的代码分析学习(二)首页文件的更多相关文章
- 对discuz的代码分析学习(一)目录结构
主目录 DISCUZ用的是自己的框架,和其他框架应用一样属于单入口应用.主目录下的.php文件,大部分是应用的入口文件. home.php:家园入口,即论坛中类似博客的那个东西.index.php:首 ...
- 对discuz的代码分析学习(四)论坛入口文件
只是大致分析下执行流程,主要就是取得mod参数的值,根据取值加载控制器,控制器位置在最后一行指定了. 1 )定义应用名称,加载两个必要文件 define('APPTYPEID', 2); define ...
- 对discuz的代码分析学习(三)mysql驱动
一. 属性分析 1.tablepre :表名称前缀 2.version : 数据库版本 3.drivertype:驱动类型 4.querynu ...
- 分享非常有用的Java程序 (关键代码) (二)---列出文件和目录
原文:分享非常有用的Java程序 (关键代码) (二)---列出文件和目录 File dir = new File("directoryName"); String[] child ...
- dedecms代码研究二
dedecms代码研究(2)从index开始现在继续,今天讲的主要是dedecms的入口代码.先打开index.PHP看看里面是什么吧.打开根目录下的index.php嗯映入眼帘的是一个if语句.检查 ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
- [置顶]
几行代码实现ofo首页小黄人眼睛加速感应转动
最新版的ofo 小黄车的首页小黄人眼睛随重力而转动,感觉有点炫酷,学习一下吧,以下代码是在xamarin android下实现 ofo首页效果图: xamarin android实现效果: 实现思路: ...
- Servlet总结二(文件路径)
Servlet总结二(文件路径) 前言 前面我们说过ServletContext表示的是web容器中的上下文,下面我们也是用到ServletContext中的方法读取文件 读取WebRoot文件下的文 ...
- Discuz!X 3.4 前台任意文件删除漏洞复现
Discuz!X 3.4 前台任意文件删除漏洞复现 参考链接: http://www.freebuf.com/vuls/149904.html http://www.freebuf.com/artic ...
随机推荐
- jQuery源码笔记——准备
将变量局部化 作为一个库首要解决的问题就是防止影响全局的变量.自执行匿名函数可以很好的实现这一点. 传入window,undefiend是将全局变量改为局部变量,根据作用域链访问原理,访问更快一些,. ...
- CentOS 修改默认语言
查看所有的locale语言 [root@centos6 ~]# locale -a ... ... ... ... xh_ZA xh_ZA.iso88591 xh_ZA.utf8 yi_US yi_U ...
- 应用程序无法启动,因为应用程序的并行配置不正确,有关详细信息,请参阅应用程序事件日志,或使用命令行SxsTrace.exe工具
今天做项目,需要用C#引用C++的链接库文件,但是在调试的时候会报错这个错误. 运行SxsTrace.exe 以管理员用户登陆,启动cmd; 执行命令:SxsTrace Trace -logfile: ...
- RabbitMQ 消息队列
一:简介 RabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Public License开源协议.采用 Erlang 实现的工业级的消息队列(MQ)服务 ...
- Javascript 匀速运动停止条件——逐行分析代码,让你轻松了解运动的原理
我们先来看下之前的匀速运动的代码,修改了速度speed后会出现怎么样的一个bug.这里加了两个标杆用于测试 <style type="text/css"> #div1 ...
- MyEclipse数据库反向生成实体类
MyEclipse数据库反向生成实体类 “计应134(实验班) 凌豪” 当我们在开发项目涉及到的表太多时,一个一个的写JAVA实体类很是费事.然而强大的MyEclipse为我们提供简便的方法:数据库反 ...
- chromedriver bug
https://github.com/FuckTheWorld/chromedriver/issues/1145 https://bugs.chromium.org/p/chromedriver/is ...
- C语言入门(8)——形参与实参
对于带参数的函数,我们需要在函数定义中指明参数的个数和每个参数的类型,定义参数就像定义变量一样,需要为每个参数指明类型,并起一个符合标识符命名规则的名字.例如: #include <stdio. ...
- ubuntu15.04下编译 libvirt
很久没有编译 libvirt了. 工作需要,重新编译. [org_ref]: http://libvirt.org/compiling.html 很简单. 编译过程, 还是很多问题. 依赖包(给懒人参 ...
- openNebula dubug
lowest common denominator convenient way to manage virtual machines