、栏目页或首页中,直接写 <?php ?> 代码不执行
这是最常见的情况,很多新手以为在后台编辑器里直接写 PHP 代码就能执行,但实际上,DedeCMS 默认对内容中的 PHP 代码是过滤和禁用的,这是出于安全考虑。

原因分析:
DedeCMS 的内容模型(如文章模型)在保存和发布内容时,会对内容进行过滤,防止用户提交恶意代码。<?php ... ?> 会被当作普通文本处理,而不会在服务器上执行。
解决方案:
方法1:使用“自定义宏标记”(推荐,最安全)
这是 DedeCMS 提供的官方、安全的方式,允许你在模板中插入动态内容。
-
编写PHP脚本文件: 在你的网站根目录(或
include目录)下,创建一个.php文件,my_custom_code.php。
(图片来源网络,侵删)<?php // 这个文件可以包含你的任何PHP逻辑 $current_time = date("Y-m-d H:i:s"); $hello_world = "Hello, from PHP!"; ?> -
在DedeCMS后台创建宏标记:
- 登录 DedeCMS 后台。
- 进入 “核心” -> “宏标签”。
- 点击 “增加新宏标记”。
- 宏名称:填写一个你喜欢的名字,
mytime。 - :把你上一步创建的
my_custom_code.php文件中的变量写在这里。$current_time或$hello_world。 - 保存。
-
在模板中使用宏标记: 打开你需要显示 PHP 内容的模板文件(
article_article.htm)。 直接使用{dede:mytime/}或{dede:myworld/}即可调用。<p>当前时间是:{dede:mytime/}</p> <p>{dede:myworld/}</p>
方法2:修改内容模型(不推荐,有安全风险)
如果你确实需要在文章内容里直接写 PHP 代码,可以修改模型配置。
-
找到模型配置文件: 模型配置通常位于
/data/enums/contenttype.php,这是一个数组,定义了不同字段的处理方式。 -
修改字段过滤规则: 用文本编辑器打开
contenttype.php,找到array('body','description')这部分(body是文章正文的字段名),确保body字段没有被'php'过滤。// 原始代码可能是这样,会过滤掉php // 'body' => array('html','text'), // 修改为这样,允许html和php 'body' => array('html','text','php'),警告:这样做会带来巨大的安全风险!如果网站有漏洞,攻击者就可以在文章里写入任意 PHP 代码(如木马),从而控制你的整个服务器。请谨慎使用!
在DedeCMS模板文件(.htm)中,PHP代码不执行
如果你在模板文件(如 index.htm, list_article.htm)中写了 <?php ?> 代码,但它没有生效。
原因分析:
- 模板引擎未开启:DedeCMS 默认使用自己的模板引擎解析
.htm文件,如果引擎未正确开启,{dede:}标记和<?php ?>代码都不会被解析。 - 代码语法错误:PHP 代码本身有语法错误,导致解析失败。
- 文件权限问题:服务器上的 PHP 进程没有读取模板文件的权限。
解决方案:
检查并开启模板引擎
DedeCMS 的模板引擎是默认开启的,如果被关闭了,需要修改配置文件 /include/common.inc.php。
找到类似下面这行代码,并确保没有被注释掉:
// require_once(DEDEINC.'/dedetemplate.class.php');
如果前面有 ,请去掉它。
使用 DedeCMS 的模板语法(推荐)
在模板中,尽量使用 DedeCMS 的模板语法,而不是直接写 <?php ?>,循环栏目:
{dede:channel type='top'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
如果需要复杂的逻辑,可以结合 <?php ?> 和 DedeCMS 的变量。
检查代码语法和权限
- 语法:用专业的 PHP 编辑器(如 VS Code, Sublime Text)打开模板文件,检查 PHP 代码是否有报错。
- 权限:通过 FTP 或 SSH 检查模板文件的权限,通常设置为
644即可。
后台或前台页面完全空白,没有任何内容
这是一个比较严重的问题,通常是由于 PHP 代码致命错误导致的。
原因分析:
- PHP 版本不兼容:你使用的 DedeCMS 版本可能与服务器上的 PHP 版本不兼容(很老的 DedeCMS 不支持 PHP 7.x/8.x)。
- 修改了核心文件导致致命错误:在修改 DedeCMS 源码(如
index.php,arclist.lib.php等)时,出现了语法错误,导致 PHP 引擎无法启动。 - 服务器配置问题:如
display_errors被设置为Off,所以错误信息没有显示,页面直接空白。
解决方案:
检查 PHP 错误日志
这是最关键的一步,错误日志会告诉你问题出在哪里。
- 方法一:在
php.ini文件中设置display_errors = On,然后刷新页面,看看是否能看到具体的错误信息。 - 方法二:查看服务器的错误日志文件,常见的路径有:
/var/log/php_errors.log/var/log/nginx/error.log/var/log/apache2/error.log- 在你的虚拟主机控制面板里通常也能找到。
检查 PHP 版本兼容性
登录你的服务器,运行 php -v 命令查看当前 PHP 版本,然后去 DedeCMS 官方论坛或文档,确认你的 DedeCMS 版本是否支持该 PHP 版本,如果不支持,请升级或降级 DedeCMS。
回滚修改
如果你最近修改过任何 PHP 文件,请先恢复到修改前的状态,看看问题是否解决,如果解决了,再逐步检查你的修改内容,找出错误所在。
总结与排查步骤
遇到 "dede php 不显示" 的问题,请按以下步骤进行排查:
- 明确问题场景:是文章内容不显示,还是模板不显示,还是整个页面空白?
- 检查具体位置:
- :优先考虑“自定义宏标记”,不要轻易修改模型配置。
- 模板文件:检查语法、权限,并优先使用 DedeCMS 模板标签。
- 页面空白:立即检查 PHP 错误日志,这是最快找到问题的方法。
- 从简单到复杂:先检查最常见的原因(如语法错误、日志),再考虑复杂的配置问题(如模型修改、版本兼容)。
- 备份!备份!备份! 在修改任何核心文件或数据库之前,务必备份你的网站和数据库,以防万一。
希望这些信息能帮助您解决问题!如果您能提供更具体的错误信息或截图,我可以给出更精确的指导。
