Bacysoft.cn

 找回密码
 邀请注册
查看: 29509|回复: 0
打印 上一主题 下一主题

新安装的 Discuz!X 是如何判断是否是第一次安装并自动跳转到 Install 页面的呢?

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-5 16:51:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过分析 Discuz 的源码可以找到答案。

首先在 Discuz! X2 根目录下找到 index.php。正常情况下首先加载的均是此文件。此文件的主要功能是根据客户端传送过来的URL来判断应该跳转到的目标页面。

例如,假设用户输入的网址是:http://www.bacysoft.cn/?2,那么 index.php 就能通过如下代码自动跳转到“UID=2”的用户的个人空间。
  1. if(!empty($_SERVER['QUERY_STRING']) && is_numeric($_SERVER['QUERY_STRING'])) {        //如果查询字串非空且是数字
  2.         $_ENV['curapp'] = 'home';        //则设置当前应用为家园并设置相关变量指定将要跳转到的用户空间
  3.         $_GET = array('mod'=>'space', 'uid'=>$_SERVER['QUERY_STRING']);       
  4. }
复制代码
如果没有跟任何参数,且是第一次安装 index.php 运行完最后的结果就是跳转到 portal.php 继续处理。跳转代码如下:
  1.         header("HTTP/1.1 301 Moved Permanently");        //这里跳转到对应的模块的入口
  2.         header("location: $url");
复制代码
其中 $url 的值便是“portal.php”。

当页面跳转到 portal.php 以后,将加载 Discuz! X2 核心类,并创建一个核心类的实例!代码如下:
  1. require './source/class/class_core.php';
  2. $discuz = & discuz_core::instance();
复制代码
核心类初始化的时候需要判断是否是第一次安装,如果是就跳转到安装页面执行安装程序。下面我们找到并打开定义了核心类的文件:“./source/class/class_core.php”。找到核心类的构造函数,代码如下:
  1.         function discuz_core() {
  2.                 $this->_init_env();
  3.                 $this->_init_config();
  4.                 $this->_init_input();
  5.                 $this->_init_output();
  6.         }
复制代码
我们看到构造函数主要做了四件事情:初始化环境、初始化配置、初始化输入、初始化输出。依次查看这四个模块,终于在“_init_config()”中找到了“install”的身影。代码如下:
  1.         function _init_config() {

  2.                 $_config = array();
  3.                 @include DISCUZ_ROOT.'./config/config_global.php';
  4.                 if(empty($_config)) {
  5.                         if(!file_exists(DISCUZ_ROOT.'./data/install.lock')) {
  6.                                 header('location: install');
  7.                                 exit;
  8.                         } else {
  9.                                 system_error('config_notfound');
  10.                         }
  11.                 }
复制代码
这段代码位于“function _init_config()”起始的部分,可以看到,代码首先定义了变量“$_config”,然后加载配置文件“./config/config_global.php”,如果是第一次安装,这个配置文件是不存在的。这样变量“$_config”依旧是空值,于是判断“./data/install.lock”文件是否存在,如果也不存在就确定是第一次安装,然后马上通过命令“header('location: install')”跳转到安装页面。

本次分析到处结束,以上分析基于 Discuz! X2 Release 20120329
您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-12-25 16:15 , Processed in 0.013353 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表