在 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` 的使用有更多疑问,欢迎进一步探讨!