index.php 是 DedeCMS 网站的入口文件,它的核心作用是接收用户请求、初始化系统环境,并根据请求参数加载相应的控制器或直接执行模板渲染,最终生成并输出网页内容。

下面,我们将从文件结构、核心流程和关键代码三个方面进行深入分析。
文件结构与核心代码
一个标准的 DedeCMS index.php 文件结构非常清晰,通常包含以下几个部分:
- 安全检查:防止直接访问核心文件。
- 引入常量定义文件:定义网站根目录、CMS路径等关键路径。
- 引入核心入口文件:加载整个CMS的引擎。
- 实例化并运行控制器:根据URL参数,找到并执行对应的控制器逻辑。
下面是一个典型的 index.php 文件代码,并附有详细注释:
<?php
/**
* DedeCMS 主入口文件
*/
// ------------------------------------------------------------------------
// 1. 安全检查
// 如果当前请求的文件名不是 'index.php',则中止脚本执行,防止直接访问入口文件以外的脚本。
// 这是一种常见的安全措施,确保所有请求都通过统一的入口。
if (!file_exists(dirname(__FILE__) . '/common.inc.php')) {
exit('Request Error!');
}
// 2. 引入常量定义文件 (defines.php)
// 这个文件定义了 DedeCMS 运行所需的全局常量,例如网站的根目录、CMS程序目录、缓存目录等。
// 使用 `require_once` 确保只被加载一次。
require_once (dirname(__FILE__) . '/include/defines.php');
// 3. 引入并初始化核心入口文件 (dedeapi.class.php)
// 这是整个 DedeCMS 的“引擎”或“启动器”。
// 它负责初始化环境、加载配置、处理用户请求、设置模板变量等。
require_once DEDEINC . '/dedeapi.class.php';
// 4. 实例化并运行 DedeAPI 对象
// 创建一个 DedeAPI 类的实例,这是整个网站运行的核心对象。
$dede = new DedeAPI();
// 5. 运行并显示页面
// 调用对象的 `Exec` 方法,这个方法会根据当前的 URL 参数(如 `m`, `c`, `a` 等),
// 决定是加载一个静态HTML页面,还是执行某个控制器的某个方法,最终渲染出HTML内容并输出。
$dede->Exec();
// 6. 销毁对象
// 运行结束后,销毁 $dede 对象,释放内存。
unset($dede);
?>
核心流程解析
当一个用户访问你的网站首页(http://www.yoursite.com/)时,index.php 的执行流程如下:

-
请求到达:Web 服务器(如 Apache, Nginx)接收到对
index.php的请求。 -
安全检查:代码首先检查
common.inc.php文件是否存在,如果不存在,说明网站文件可能不完整或被破坏,脚本会立即退出并显示“Request Error!”,这是一个基本的安全校验。 -
加载常量:
require_once (dirname(__FILE__) . '/include/defines.php');这行代码引入了defines.php,这个文件定义了像DEDEROOT(网站根目录)、DEDEINC(核心库目录) 等关键路径,这使得后续的代码可以方便地引用各个文件,而无需使用复杂的相对路径。 -
启动引擎:
require_once DEDEINC . '/dedeapi.class.php';引入了核心引擎类DedeAPI,这个类是 DedeCMS 的“大脑”,它做了大量工作:
(图片来源网络,侵删)- 初始化环境:设置PHP的运行环境(如时区、错误级别等)。
- 加载配置:读取
data/config.cache.inc.php等配置文件,获取网站的基本信息(如网站名称、关键词等)。 - 处理请求:解析URL参数,DedeCMS 使用一种类似 MVC 的模式,通过URL中的参数来确定要执行哪个模块和操作。
-
执行控制器 (最关键的一步):
$dede->Exec();是整个流程的核心。Exec方法的内部逻辑大致如下:- 检查是否为静态页面:它会检查请求的页面是否是一个已经生成的静态HTML文件(
index.html),如果存在,并且未过期,则直接读取并输出这个HTML文件,速度极快,这是 DedeCMS 性能优化的一个关键点。 - 动态请求处理:如果不是静态页面或需要更新,它会解析URL参数,在较新的DedeCMS版本中,URL参数通常包括:
m: 模块,代表要访问的功能模块,index(首页),list(列表页),article(文章内容页),search(搜索页) 等。c: 控制器,在模块内进一步细分,index模块下可能有index控制器。a: 方法,代表控制器要执行的具体操作,index(显示首页),show(显示文章)。
- 加载控制器并执行:根据
m,c,a的值,Exec方法会找到对应的控制器文件(/include/dedemodule/index/index.class.php),实例化该控制器,并调用指定的方法(如index()方法)。 - 准备模板变量:控制器方法会从数据库中获取数据(如文章列表、文章内容),并将这些数据赋值给模板引擎。
- 渲染模板:模板引擎(通常是
dedetemplate.class.php)会加载对应的模板文件(/templets/default/index.htm),将数据填充进去,生成最终的HTML代码。 - 输出并缓存:生成的HTML代码被输出到浏览器,如果开启了缓存,系统还会将这个HTML文件保存到静态缓存目录中,以便下次访问时直接使用。
- 检查是否为静态页面:它会检查请求的页面是否是一个已经生成的静态HTML文件(
-
结束:
unset($dede);清理对象,脚本执行完毕。
关键文件和概念总结
| 文件/概念 | 作用 | 重要性 |
|---|---|---|
index.php |
网站入口,负责引导请求进入CMS系统。 | 最高,是所有动态请求的起点。 |
include/defines.php |
定义常量,统一管理网站和程序的核心路径。 | 高,是文件定位的基础。 |
include/dedeapi.class.php |
核心引擎,初始化环境、加载配置、调度控制器。 | 最高,是整个CMS的“心脏”。 |
data/config.cache.inc.php |
配置文件,存储网站的全局设置(网站信息、数据库连接等)。 | 高,CMS运行的配置依据。 |
| 静态HTML缓存 | DedeCMS的性能优化手段,首页和栏目页通常会被生成静态文件,直接读取而不需要PHP执行和数据库查询。 | 高,直接影响网站访问速度。 |
URL参数 (m, c, a) |
路由机制,告诉系统要加载哪个模块、哪个控制器的哪个方法。 | 高,决定了网站的“行为”。 |
如何修改或自定义首页?
如果你想修改网站的首页,通常有两种方式:
- 修改模板文件:这是最常用的方式,找到并编辑
templets/default/index.htm文件,这个文件是首页的HTML模板,你可以直接修改其HTML结构、CSS样式和内容标签(如{dede:arclist})。 - 修改控制器逻辑:如果你需要修改首页获取数据的方式或业务逻辑,可以编辑
include/dedemodule/index/index.class.php文件中的index()方法,你可能想在首页额外显示某个特定分类的文章。
index.php 是一个简洁而强大的“路由器”和“启动器”,它本身不包含复杂的业务逻辑,而是通过引入和调用其他核心类(尤其是 DedeAPI)来完成整个网站内容的呈现,理解了这个流程,你就掌握了 DedeCMS 运行的基本原理。
