问题根源分析
织梦模板引擎默认只解析特定的模板标签(如 {dede:arclist}),对于直接的PHP代码,它的处理方式取决于你的服务器环境和配置。

(图片来源网络,侵删)
核心原因:服务器将 .html 或其他非 .php 结尾的文件当作静态文件处理,而没有交给PHP解释器去执行其中的PHP代码。
解决方案(按推荐顺序)
使用织梦内置的 php 标签(最推荐、最安全)
这是织梦官方提供的在模板中执行PHP代码的标准方法,它能让织梦的模板引擎安全地执行PHP代码,并自动处理变量作用域。
语法:
{dede:php}
// 在这里写你的PHP代码
// 输出当前时间
echo date('Y-m-d H:i:s');
// 你也可以在这里调用织梦的全局变量和函数
// global $dsql;
// $row = $dsql->GetOne("SELECT * FROM `dede_archives` WHERE id=1");
// if(is_array($row)) {
// echo $row['title'];
// }
{/dede:php}
优点:

(图片来源网络,侵删)
- 安全性高:织梦会对这段代码进行一定的安全检查,防止直接执行用户输入的危险代码。
- 集成性好:能无缝访问织梦的全局变量(如
$dsql数据库连接对象)。 - 官方支持:这是官方推荐的方式,稳定可靠。
使用场景: 绝大多数需要在模板中执行简单PHP逻辑的场景。
修改伪静态规则,让 .html 文件被PHP解析(适用于需要整个页面解析的情况)
如果你的整个页面都需要包含PHP代码,而不仅仅是某个片段,那么你需要配置服务器的伪静态规则,让服务器将 .html 文件也当作PHP文件来处理。
对于 Apache 服务器
你需要修改 .htaccess 文件(通常位于网站根目录),在文件中添加以下代码:

(图片来源网络,侵删)
# 将 .html 文件作为 PHP 文件处理 AddHandler application/x-httpd-php .html # 或者如果你的PHP版本是7/8,可以这样写 # AddHandler application/x-httpd-php72 .html
对于 Nginx 服务器
你需要修改 nginx.conf 文件或在网站的配置文件中添加以下规则:
location ~ .*\.html$ {
# 将 .html 文件交给PHP-FPM处理
fastcgi_pass 127.0.0.1:9000; # 根据你的实际PHP-FPM端口修改
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.html)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注意:
- 性能影响:这个配置会让所有以
.html结尾的请求都经过PHP-FPM处理,这会略微增加服务器负载,如果你的网站大部分是纯静态的HTML,这不是最佳选择。 - 谨慎操作:修改服务器配置有风险,建议在测试环境验证无误后再应用到生产环境。
使用 PHP 的 include 或 require 引入外部PHP文件(适用于代码复用)
如果你的PHP代码比较复杂,或者想在多个页面中复用,最好的方式是将其写在一个独立的 .php 文件中,然后在模板中引入它。
创建一个独立的PHP文件
在 /include/ 目录下创建一个文件 my_functions.php:
// /include/my_functions.php
<?php
function getSpecialContent($id) {
// 这里写你的业务逻辑
// global $dsql; // 如果需要操作数据库,请取消注释并声明全局变量
// $row = $dsql->GetOne("SELECT title FROM `dede_archives` WHERE id={$id}");
// return $row['title'];
return "这是ID为 {$id} 的特殊内容";
}
?>
在织梦模板中引入
使用 {dede:php} 标签来引入和调用:
{dede:php}
// 引入外部文件
require_once('/include/my_functions.php');
// 调用函数并输出结果
$content = getSpecialContent(10);
echo $content;
{/dede:php}
优点:
- 代码分离:使模板文件(HTML)和业务逻辑(PHP)分离,更易于维护。
- 复用性强:一个PHP文件可以在多个模板中被调用。
直接修改模板文件后缀为 .php(最直接,但有缺点)
这是一个最“粗暴”但有时也最有效的方法。
步骤:
- 将你的模板文件(
index.html)重命名为index.php。 - 在织梦后台,【模板】->【默认模板管理】中,找到对应的页面,将其模板文件名也修改为
index.php。
优点:
- 100%生效:服务器会直接将其作为PHP文件解析,所有PHP代码都会被执行。
缺点:
- 破坏了织梦的模板体系:织梦的缓存、标签解析等机制都是基于
.html文件设计的,使用.php后缀可能会在某些功能上与织梦系统产生冲突,尤其是在需要生成静态HTML时。 - 不推荐:除非你非常清楚自己在做什么,否则不推荐这种方法,它通常用于制作一个完全独立的、不依赖织梦标签系统的页面。
总结与排查步骤
当你遇到“织梦不解析PHP,直接输出”的问题时,请按以下步骤排查:
- 首选方案:尝试使用 方案一 的
{dede:php}标签,这能解决90%以上的问题。 - 检查文件后缀:确认你的模板文件是不是
.html后缀,如果是,并且里面有大段PHP代码,考虑 方案二 或 方案三。 - 检查服务器配置:如果你确定需要让
.html文件执行PHP,请检查服务器的.htaccess(Apache) 或nginx.conf(Nginx) 配置,确保AddHandler或location规则已正确添加。 - 最后手段:如果以上方法都无效,且你只是制作一个特殊页面,可以考虑 方案四,但要意识到它可能带来的副作用。
对于绝大多数织梦用户来说,熟练掌握 {dede:php} 标签和 include 引入外部文件的方法,就足以应对所有在模板中执行PHP的需求。
