织梦common.inc.php有何关键配置与安全要点?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

文件位置与作用

  • 文件位置: /include/common.inc.php
  • 核心作用: 全局初始化文件,当任何一个织梦页面(无论是前台还是后台)被访问时,这个文件都会被最先加载,它就像一个总指挥,确保系统各个模块和配置都处于正确的工作状态。

代码结构与功能详解

下面我们分段落解析这个文件的主要功能。

织梦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);

功能解析:

织梦common.inc.php
(图片来源网络,侵删)
  • 连接数据库: 使用 mysql_connect (在较新版本中可能已被mysqliPDO替代,但织梦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';
// ... 更多全局变量

功能解析:

织梦common.inc.php
(图片来源网络,侵删)
  • 方便调用: 这些全局变量可以在模板文件(.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的基石,它的执行流程可以概括为:

  1. 安全检查: 确保环境和配置合法。
  2. 环境准备: 连接数据库,定义路径常量。
  3. 核心加载: 载入所有功能类库。
  4. 数据初始化: 读取配置和缓存,填充全局变量。
  5. 会话处理: 验证用户登录状态。
  6. 模板准备: 初始化模板引擎,确定要显示的页面。

对于开发者来说:

  • 修改配置: 不要直接修改 common.inc.php 中的硬编码值,所有可配置项都应在后台或 config.php 中修改。
  • 添加功能: 如果需要添加全局性的功能,通常可以考虑在这里引入新的类库或初始化新的全局变量。
  • 调试问题: 当网站出现白屏或功能异常时,common.inc.php 是第一个需要检查的地方,特别是数据库连接、文件路径和常量定义部分。

简而言之,common.inc.php 就像一场大型演出的总导演,在幕后默默协调一切,确保每个页面都能正确、高效地呈现在用户面前。

-- 展开阅读全文 --
头像
严蔚敏数据结构C语言版课后习题答案怎么找?
« 上一篇 2025-12-13
织梦模板更新后如何修改typeid?
下一篇 » 2025-12-13

相关文章

取消
微信二维码
支付宝二维码

目录[+]