这个文件是整个织梦系统的核心配置文件和初始化文件,你可以把它理解为织梦网站的“总控制中心”或“启动器”,在任何一个织梦页面被加载之前,这个文件几乎总是最先被执行的。

(图片来源网络,侵删)
文件位置与作用
文件位置: /include/common.inc.php
核心作用:
- 系统启动: 它是整个织梦CMS的入口文件,负责加载和初始化系统运行所需的基本环境。
- 配置加载: 它加载并定义了网站的全局配置变量(如网站名称、数据库信息等)。
- 安全防护: 它包含了许多核心的安全检查和过滤机制,是网站安全的第一道防线。
- 常量定义: 它定义了系统中常用的路径、目录等常量,方便其他文件调用。
- 函数库引入: 它引入了系统最核心的函数库文件。
你修改织梦网站的大部分后台设置,最终都会体现在这个文件或由它加载的配置文件中。
文件代码结构与详解
下面我们分块解析 common.inc.php 的代码,并解释每一部分的作用。

(图片来源网络,侵删)
安全验证与防直接访问
if(!file_exists(dirname(__FILE__).'/config.php')) {
header('HTTP/1.1 404 Not Found');
header('Status: 404 Not Found');
exit();
}
if(!defined('DEDEREG')) define('DEDEREG', 1);
require_once(dirname(__FILE__).'/config.php');
if(!file_exists(...)):首先检查核心配置文件config.php是否存在,如果不存在(比如是新安装或文件丢失),则直接返回404错误并退出,这是一个非常关键的保护措施,防止系统在没有配置的情况下运行。if(!defined('DEDEREG')) define('DEDEREG', 1);:定义一个名为DEDEREG的常量,并赋值为1,这个常量就像一个“通行证”,表明这个文件是通过合法途径(被index.php或其他入口文件)调用的,而不是被恶意直接访问,在其他文件中,经常会先检查这个常量是否存在,如果不存在则拒绝执行。require_once(...):加载并执行/include/config.php文件。config.php存储了数据库连接信息、网站管理员邮箱、网站路径等最敏感的配置。
安全检查与错误报告设置
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
exit('DedeCMS requires PHP 5.6.0 or higher.');
}
// 错误报告设置
error_reporting(E_ALL ^ E_NOTICE);
version_compare(...):检查当前PHP版本是否低于5.6.0,如果是,则直接退出并提示,确保系统在兼容的PHP环境下运行。error_reporting(...):设置PHP的错误报告级别。E_ALL ^ E_NOTICE的意思是报告所有级别的错误,但是不报告E_NOTICE( Notice)级别的错误。Notice通常是代码中的小问题(如使用未定义的变量),在开发阶段可能有用,但在生产环境中会产生大量无用的日志,因此通常被屏蔽。
定义核心全局变量
$cfg_cmspath = '/'; // 网站CMS安装目录 $cfg_mainsite = 'http://www.yoursite.com'; // 网站主域名 $cfg_multi_site = 'N'; // 是否开启多站点 // ... 还有许多其他从config.php加载过来的全局变量,如 $cfg_dbhost, $cfg_dbuser 等
这些变量是从 config.php 中加载过来的,它们定义了网站的基本信息,如数据库地址、用户名、密码、网站路径、网站名称等,这些变量在后续的整个网站运行过程中被频繁使用。
定义系统路径常量
这是 common.inc.php 的另一个核心功能,它定义了一系列常量来指向系统的各个目录,方便在代码中引用,避免写死路径。
define('DEDEROOT', __DIR__); // 定义根目录,如 /var/www/html/include
define('DEDEDATA', DEDEROOT . '/data'); // 数据目录,存放缓存、配置等
define('DEDEMEMBER', DEDEROOT . '/member'); // 会员中心目录
define('DEDEINC', DEDEROOT . '/inc'); // 函数库目录
define('DEDETEMPLATE', DEDEROOT . '/templets'); // 模板目录
// ... 等等
使用常量的好处是:
- 可维护性:如果将来需要移动网站目录,只需修改这些常量的定义即可,而不需要改动成千上万的文件。
- 可读性:代码中看到
DEDEDATA,就能立刻明白它指向数据目录。
核心函数库的引入
require_once(DEDEINC.'/dedetemplate.class.php'); require_once(DEDEINC.'/connect.php'); require_once(DEDEINC.'/inc_fun_funAdmin.php'); require_once(DEDEINC.'/inc_typelink.php'); require_once(DEDEINC.'/inc_archives_view.php'); // ... 引入更多核心类和函数文件
这里加载了织梦最核心的功能模块,

(图片来源网络,侵删)
dedetemplate.class.php:模板引擎类,负责解析和加载模板文件。connect.php:数据库连接和操作的核心函数。inc_fun_funAdmin.php:后台常用函数库。inc_typelink.php:栏目链接处理函数。inc_archives_view.php页(文章模型)视图处理的核心文件。
数据库连接与字符集设置
// 检查并执行数据库连接
if(empty($dsql) || !is_object($dsql)) {
require_once(DEDEINC.'/dedesql.class.php');
$dsql = new Dedesql(false);
}
// 设置数据库连接字符集
$dsql->SetQuery("SET NAMES 'utf8'");
$dsql->Execute();
- 这里会检查全局变量
$dsql(数据库连接对象)是否存在,如果不存在,则创建一个新的数据库连接对象,这是单例模式的一种简单应用,确保整个网站只使用一个数据库连接,提高效率。 SET NAMES 'utf8':设置数据库连接的字符集为utf8,确保PHP程序与数据库之间通信时使用统一的编码,避免乱码。
全局安全过滤
这是网站安全的关键部分,common.inc.php 会引入一个专门的安全过滤文件。
require_once(DEDEINC.'/safety_filter.php');
safety_filter.php 文件通常会做以下几件事:
- 全局变量过滤:对
$_GET,$_POST,$_COOKIE等超级全局数组进行遍历和过滤,防止SQL注入、XSS跨站脚本等攻击。 - 敏感函数禁用:可能会禁用一些危险的PHP函数(如
eval,assert等)。 - 请求来源检查:检查请求是否来自本站,防止CSRF攻击。
常见问题与修改建议
如何修改网站基本信息?
- 数据库信息:修改
/include/config.php文件中的$cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname。 - 网站名称、版权信息等:登录织梦后台,在“系统” -> “系统基本参数”中修改,这些参数会被写入
data/config.cache.inc.php文件中,common.inc.php在运行时会优先加载这个缓存文件。
出现 "Include/config.php does not exist!" 错误?
- 原因:
/include/config.php文件丢失或不存在。 - 解决方法:
- 如果是新网站,请先运行
/install/index.php完成安装。 - 如果是旧网站,请从织梦官方程序包中找到
config.php.sample文件,重命名为config.php,然后根据你的数据库信息修改其内容。
- 如果是新网站,请先运行
如何提高网站安全性?
- 文件权限:确保
common.inc.php和config.php的文件权限设置为644(所有者可读写,组和其他用户只读),目录权限设置为755。 - 定期更新:关注织梦官方的更新日志,及时打上安全补丁。
- 修改后台目录:不要使用默认的
/dede/作为后台目录,可以自定义一个复杂的名称。 - 检查代码:不要使用来路不明的插件或模板,它们可能被植入恶意代码。
common.inc.php 是织梦CMS的基石,理解了它的作用和工作原理,你就理解了织梦系统是如何启动和运作的,对于任何想要深入学习织梦开发或者进行二次定制的人来说,仔细研究这个文件是必不可少的第一步,它定义了规则,加载了资源,并守卫着网站的大门。
