在dedecms系统中,包含文件夹功能主要用于实现模板文件的复用和模块化管理,特别是在需要跨目录调用公共模板或动态加载内容时,这一功能通过PHP的include语句或dedecms提供的标签语法实现,具体操作需结合文件路径、模板引擎规则及服务器权限配置,以下从原理、方法、注意事项及实例四个方面详细说明。

包含文件夹的核心原理
dedecms的模板解析依赖于PHP环境,包含文件夹的本质是通过服务器端执行PHP代码,将目标文件夹中的文件内容嵌入到当前模板中,这一过程需满足三个前提:1)目标文件夹存在且可读;2)包含文件为.php或.html格式(需确保PHP能解析);3)服务器开启allow_url_include和fileinfo扩展(部分场景需配置),dedecms支持两种包含方式:静态包含(直接引入文件内容)和动态包含(通过标签解析变量后再引入)。
实现包含文件夹的具体方法
使用PHP原生include语句
在模板文件中直接编写PHP代码,需开启dedecms的“启用PHP”选项(后台系统基本参数-其他设置中开启),要在index.html中包含include/common.php文件,可写入:
<?php include_once(DEDEROOT.'/include/common.php'); ?>
DEDEROOT是dedecms定义的根目录常量,确保路径从站点根目录开始计算,若包含相对路径,需注意模板文件所在的层级关系。
通过dedecms标签实现动态包含
对于需要模板引擎解析的文件,可使用dedecms的{dede:include}标签,包含一个模板文件夹中的header.html:

{dede:include file='templets/default/header.html'/}
file参数的路径是相对于当前模板目录的,若需跨目录,可使用绝对路径(需以/开头)或通过{dede:global name='cfg_cmspath'/}获取CMS路径。
自定义函数封装包含逻辑
在/include/common.inc.php中自定义函数,
function myInclude($file) {
require_once(DEDEROOT.'/'.$file);
}
然后在模板中调用:
<?php myInclude('include/myfile.php'); ?>
文件夹批量包含的循环处理
若需包含文件夹内所有.php文件,可结合glob函数和循环语句:

<?php
$files = glob(DEDEROOT.'/include/*.php');
foreach ($files as $file) {
include_once($file);
}
?>
路径配置与常见问题解决
| 问题类型 | 原因分析 | 解决方案 |
|---|---|---|
| 包含失败(404错误) | 路径错误或文件不存在 | 检查路径是否从根目录开始,确认文件权限为644 |
| 模板变量不解析 | 使用PHP原生include导致标签未被引擎处理 | 改用{dede:include}标签或开启模板PHP支持 |
| 安全警告 | 包含用户上传目录下的文件 | 避免动态拼接路径,对文件名进行白名单过滤 |
| 性能问题 | 多层嵌套包含导致解析缓慢 | 使用静态缓存或合并公共文件 |
实际应用场景示例
假设有一个多语言站点,需根据用户语言动态加载不同文件夹的模板,可在首页模板中写入:
<?php $lang = $_GET['lang'] ? $_GET['lang'] : 'cn'; $includeFile = "templets/".$lang."/header.php"; include_once(DEDEROOT.'/'.$includeFile); ?>
在后台需对$lang参数进行合法性校验,防止目录遍历攻击。
相关问答FAQs
问题1:为什么使用{dede:include}标签时,目标文件中的dedecms标签无法解析?
解答:这通常是因为目标文件扩展名不是.html或.htm,且未在后台开启“支持PHP页面”,需确保被包含的文件为.html格式,或在文件顶部添加<!DOCTYPE html>声明以触发模板引擎解析,若仍不生效,可尝试在后台“系统基本参数-性能选项”中开启“页面静态化”功能。
问题2:如何在dedecms中安全地包含外部文件夹的文件?
解答:避免直接使用用户输入的参数拼接路径,应采用白名单机制限制可包含的目录,在自定义函数中:
$allowedDirs = ['include', 'templets']; $dir = in_array($userDir, $allowedDirs) ? $userDir : 'default'; include_once(DEDEROOT.'/'.$dir.'/'.$file);
确保被包含的文件不可执行(如.php文件需移除危险函数),并对服务器配置禁用危险PHP函数(如exec、system)。
