文件位置与作用
- 文件位置:
/include/common.inc.php - 核心作用: 全局初始化文件,当任何一个织梦页面(无论是前台还是后台)被访问时,这个文件都会被最先加载,它就像一个总指挥,确保系统各个模块和配置都处于正确的工作状态。
代码结构与功能详解
下面我们分段落解析这个文件的主要功能。

(图片来源网络,侵删)
安全检查与常量定义
文件的开头部分首先进行一系列的安全检查和常量定义,这是防止非法访问和确保代码健壮性的关键。
// 检测PHP版本
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
die('DedeCMS requires PHP 5.6.0 or higher.');
}
// 检测是否安装
if (!file_exists(dirname(__FILE__) . '/config.php')) {
header('Location:install/index.php');
exit();
}
// 加载配置文件
require_once (dirname(__FILE__) . '/config.php');
// 定义一些核心常量,防止被恶意修改
define('DEDERPATH', str_replace('\\', '/', dirname(__FILE__)));
define('DEDERMEMBER', str_replace('\\', '/', dirname(__FILE__) . '/member'));
define('DEDERDATA', str_replace('\\', '/', dirname(__FILE__) . '/data'));
define('DEDERCACHE', DEDERDATA . '/cache');
// ... 更多常量定义
功能解析:
- PHP版本检查: 确保服务器运行在支持的PHP版本上,旧版本可能导致功能异常或安全漏洞。
- 安装检测: 如果系统核心配置文件
config.php不存在,说明系统尚未安装,会自动跳转到安装向导。 - 加载配置: 加载
config.php文件,这个文件包含了数据库连接信息、网站名称等核心配置。 - 定义路径常量: 定义了织梦系统各个核心目录的绝对路径(如
DEDERPATH是include目录,DEDERDATA是data目录),使用常量而不是硬编码路径,方便后期维护和修改,也防止了路径被篡改。
数据库连接与字符集设置
这是织梦与数据库交互的基础。
// 连接数据库
if ($cfg_dbhost == '') {
die("数据库配置信息不完整,请检查配置文件!");
}
$link = mysql_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpass, true);
mysql_select_db($cfg_dbname, $link);
// 设置数据库连接编码
mysql_query("SET NAMES '{$cfg_db_language}'", $link);
功能解析:

(图片来源网络,侵删)
- 连接数据库: 使用
mysql_connect(在较新版本中可能已被mysqli或PDO替代,但织梦DedeCMS V5.x系列仍广泛使用) 连接到在config.php中配置的数据库。 - 选择数据库: 使用
mysql_select_db指定要操作的数据库。 - 设置字符集: 执行
SET NAMES语句,确保数据库连接、客户端发送和接收的数据都使用统一的字符集(通常是utf8),避免中文乱码问题。
核心类库与函数加载
织梦是一个面向对象的系统,其核心功能都封装在各个类文件中。
// 加载核心函数库 require_once (DEDERPATH . '/dedetemplate.class.php'); require_once (DEDERPATH . '/ftp.class.php'); require_once (DEDERPATH . '/sphinxapi.php'); require_once (DEDERPATH . '/userlogin.class.php'); require_once (DEDERPATH . '/file_class.php'); require_once (DEDERPATH . '/typelink.class.php'); // ... 加载大量其他功能类
功能解析:
- 按需加载: 这里会加载大量
.class.php文件,每个文件都定义了一个核心功能类,dedetemplate.class.php: 模板引擎类,负责解析和编译模板文件。userlogin.class.php: 用户登录验证类,处理用户登录、权限等。file_class.php: 文件操作类,处理文件上传、目录创建等。typelink.class.php: 栏目链接类,用于生成栏目URL。
- 功能模块化: 通过这种方式,织梦将不同的功能模块解耦,使得系统结构清晰,也方便单独升级某个模块。
全局变量初始化
织梦使用大量的全局变量来存储当前页面的信息。
// 初始化一些全局变量 $cfg_cmspath = $cfg_phpurl; $cfg_mainsite = $cfg_basehost; $cfg_indexurl = $cfg_basehost . '/'; // 初始化系统变量 $cfg_soft_lang = 'utf-8'; $cfg_notallowregister = 'N'; $cfg_feedback_guestbook = 'Y'; // ... 更多全局变量
功能解析:

(图片来源网络,侵删)
- 方便调用: 这些全局变量可以在模板文件(
.htm)和PHP脚本中直接使用,例如在模板中通过{$cfg_webname}来调用网站名称。 - 配置默认值: 从
config.php中读取配置,如果没有配置,则使用这里的默认值。
用户会话与权限验证
这部分处理用户的登录状态和权限。
// 获取当前用户ID
$uid = $cuserLogin->getUserID();
// 如果用户已登录,获取用户信息
if ($uid > 0) {
$row = $cuserLogin->getUserInfo();
$mtypeid = isset($row['mtypeid']) && is_numeric($row['mtypeid']) ? $row['mtypeid'] : 0;
}
功能解析:
- 会话管理:
$cuserLogin对象(来自userlogin.class.php)负责管理用户的登录会话,它会检查Cookie或Session中的登录凭证。 - 权限控制: 如果用户已登录,就获取其用户信息(如用户名、组别等),为后续的权限判断做准备,只有管理员才能访问后台。
缓存机制
为了提高网站性能,织梦使用了文件缓存来存储不常变动的数据,如栏目、网站配置等。
// 读取缓存配置
$ caches = array('config', 'typelink', 'booklist', 'special', 'hotwords', 'keyword', 'arctype');
foreach ($caches as $cachefile) {
$cacheFile = DEDERCACHE . '/' . $cachefile . '.inc.php';
if (file_exists($cacheFile)) {
include_once ($cacheFile);
}
}
功能解析:
- 缓存文件: 系统会将一些配置信息(如网站基本配置
config、栏目列表typelink)序列化后保存到data/cache/目录下的PHP文件中。 - 性能提升: 每次访问页面时,直接
include这些缓存文件来获取数据,而无需每次都查询数据库,大大减轻了数据库的压力,加快了页面加载速度。
模板引擎初始化
文件会初始化模板引擎,准备解析和显示页面。
// 初始化模板引擎
$dtp = new DedeTemplate();
// 根据不同页面类型加载不同模板
if ($action == 'login') {
$templet = $cfg_templeturl . '/member/login.htm';
} else {
// 默认模板逻辑
// ...
}
功能解析:
- 实例化模板类: 创建
DedeTemplate类的实例$dtp。 - 模板定位: 根据当前页面的
$action或其他参数,确定要使用的模板文件路径,访问登录页面,就加载member/login.htm。 - 后续渲染: 页面逻辑执行完毕后,会调用
$dtp->LoadTemplate()加载模板文件,然后用$dtp->Display()将解析后的HTML输出到浏览器。
common.inc.php 文件是织梦CMS的基石,它的执行流程可以概括为:
- 安全检查: 确保环境和配置合法。
- 环境准备: 连接数据库,定义路径常量。
- 核心加载: 载入所有功能类库。
- 数据初始化: 读取配置和缓存,填充全局变量。
- 会话处理: 验证用户登录状态。
- 模板准备: 初始化模板引擎,确定要显示的页面。
对于开发者来说:
- 修改配置: 不要直接修改
common.inc.php中的硬编码值,所有可配置项都应在后台或config.php中修改。 - 添加功能: 如果需要添加全局性的功能,通常可以考虑在这里引入新的类库或初始化新的全局变量。
- 调试问题: 当网站出现白屏或功能异常时,
common.inc.php是第一个需要检查的地方,特别是数据库连接、文件路径和常量定义部分。
简而言之,common.inc.php 就像一场大型演出的总导演,在幕后默默协调一切,确保每个页面都能正确、高效地呈现在用户面前。
