通过分析 Discuz 的源码可以找到答案。
首先在 Discuz! X2 根目录下找到 index.php。正常情况下首先加载的均是此文件。此文件的主要功能是根据客户端传送过来的URL来判断应该跳转到的目标页面。
例如,假设用户输入的网址是:- http://www.bacysoft.cn/?2
复制代码 ,那么 index.php 就能通过如下代码自动跳转到“UID=2”的用户的个人空间。- if(!empty($_SERVER['QUERY_STRING']) && is_numeric($_SERVER['QUERY_STRING'])) { //如果查询字串非空且是数字
- $_ENV['curapp'] = 'home'; //则设置当前应用为家园并设置相关变量指定将要跳转到的用户空间
- $_GET = array('mod'=>'space', 'uid'=>$_SERVER['QUERY_STRING']);
- }
复制代码
如果没有跟任何参数,且是第一次安装 index.php 运行完最后的结果就是跳转到 portal.php 继续处理。跳转代码如下:- header("HTTP/1.1 301 Moved Permanently"); //这里跳转到对应的模块的入口
- header("location: $url");
复制代码 其中 $url 的值便是“portal.php”。
当页面跳转到 portal.php 以后,将加载 Discuz! X2 核心类,并创建一个核心类的实例!代码如下:- require './source/class/class_core.php';
- $discuz = & discuz_core::instance();
复制代码 核心类初始化的时候需要判断是否是第一次安装,如果是就跳转到安装页面执行安装程序。下面我们找到并打开定义了核心类的文件:“./source/class/class_core.php”。找到核心类的构造函数,代码如下:- function discuz_core() {
- $this->_init_env();
- $this->_init_config();
- $this->_init_input();
- $this->_init_output();
- }
复制代码 我们看到构造函数主要做了四件事情:初始化环境、初始化配置、初始化输入、初始化输出。依次查看这四个模块,终于在“_init_config()”中找到了“install”的身影。代码如下:- function _init_config() {
- $_config = array();
- @include DISCUZ_ROOT.'./config/config_global.php';
- if(empty($_config)) {
- if(!file_exists(DISCUZ_ROOT.'./data/install.lock')) {
- header('location: install');
- exit;
- } else {
- system_error('config_notfound');
- }
- }
复制代码
本次分析到处结束,以上分析基于 Discuz! X2 Release 20120329 |