DedeCMS 是一个功能强大的内容管理系统,其数据库信息存储在文件 `data/common.inc.php` 中。系统连接数据库时会使用一个特定的函数,这个函数对于数据库初始化和连接起着至关重要的作用。以下是关于该函数及其工作原理的详细介绍。
在 DedeCMS 的核心代码中,数据库连接的初始化是通过以下函数实现的:

function Init($pconnect=FALSE) {
    $this->linkID = 0;
    $this->dbHost = $GLOBALS['cfg_dbhost']; // 数据库主机地址
    $this->dbUser = $GLOBALS['cfg_dbuser']; // 数据库用户名
    $this->dbPwd = $GLOBALS['cfg_dbpwd']; // 数据库密码
    $this->dbName = $GLOBALS['cfg_dbname']; // 数据库名称
    $this->dbPrefix = $GLOBALS['cfg_dbprefix']; // 数据表前缀
    $this->result["me"] = 0;
    $this->Open($pconnect);
}
    

从上述代码可以看出,函数 `Init()` 主要用于设置数据库连接的相关参数,并调用 `Open()` 方法完成实际的数据库连接操作。这些参数来源于全局变量数组 `$GLOBALS`,例如 `$GLOBALS['cfg_dbhost']`、`$GLOBALS['cfg_dbuser']` 等。
那么,问题来了:这些 `$GLOBALS` 变量是如何被赋值的呢? 答案在于文件 `data/common.inc.php`。这个文件包含了所有与数据库相关的配置信息。当 CMS 初始化时,会加载此文件,从而将配置变量定义到全局作用域中。例如,在 `common.inc.php` 文件中可能存在如下代码:

$cfg_dbhost = 'localhost'; // 数据库主机
$cfg_dbuser = 'root'; // 数据库用户名
$cfg_dbpwd = 'password'; // 数据库密码
$cfg_dbname = 'dedecms'; // 数据库名称
$cfg_dbprefix = 'dede_'; // 数据表前缀
    

当 `common.inc.php` 被加载后,PHP 自动将这些变量注册到全局变量数组 `$GLOBALS` 中。因此,`$GLOBALS['cfg_dbhost']` 的值就是 `'localhost'`,`$GLOBALS['cfg_dbuser']` 的值就是 `'root'`,以此类推。
总结一下,DedeCMS 的数据库配置信息是通过以下步骤实现的: 1. 在 `data/common.inc.php` 文件中定义数据库相关配置变量。 2. 当系统初始化时,加载 `common.inc.php` 文件,将这些变量注册到 `$GLOBALS` 数组中。 3. 在需要使用这些配置的地方(如数据库连接函数 `Init()`),直接从 `$GLOBALS` 中读取对应的值。 这种设计方式使得配置信息可以在整个系统中共享,而无需显式传递参数,从而简化了代码逻辑并提高了可维护性。 如果您对 DedeCMS 的数据库配置或 `$GLOBALS` 的使用有更多疑问,欢迎进一步探讨!