对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 ...
随机推荐
- iOS进阶:Objective-C runtime(一)
第一次看到runtime时,觉得太高大上,动态获取方法.属性等简直厉害的不要不要的.在经过查找资料+实践后,发现runtime并没有想象中那么复杂,接下来对runtime进行基本的介绍. 要使用运行时 ...
- Ubuntu自带的vi编辑器太难用了,换
由于Ubuntu预安装的是tiny版本,就会导致我们在使用上的产生不便.所以我们要安装vim的full版本. 首先,先卸掉旧版的vi,输入以下命令: sudo apt-get remove vim-c ...
- 在不同编程语言中对Unix时间戳进行转换(Unix timestamp)
最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript ...
- Beyond Compare设置默认为ANSI格式
工具 -> 文件格式 -> 选中C,C++,... -> 转换 -> 外部程序(ANSI文件名) 且 编码(选“ANSI”)-> 保存 -> 关闭
- jquery判断图片是否加载完毕
来源: <http://www.2cto.com/kf/201409/331234.html> 利用图片没有加载完成的时候,宽高为0.我们很容易判断图片的一个加载情况.如下: 思路:判断图 ...
- python----设置默认编码
问题:python的默认编码是ascii.在处理中文的时候可能会出现乱码的情况:这个时候我们就需要把编码设置为对应的编码了. 解决方案: 对python文件的头部做如下修改 import sys re ...
- SQL Server 权限的分类
SQL Server 的权限可以分三类 第一类 server 层面上的: select * from sys.fn_builtin_permissions(default) where class_d ...
- MRP工作台任务下达之计划组为必输
应用 Oracle Manufacturing Planning 层 Level Function 函数名 Funcgtion Name MRPFPPWB 表单名 Form Name MRPS ...
- nautilus-open-terminal右键随处打开终端
Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件 nautilus-open-terminal-0.17-4.el6.x86_64 是一个让你随处都可以打开终 ...
- [Leetcode][Python]28: Implement strStr()
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 28: Implement strStr()https://oj.leetco ...