在后台点"一键更新网站",结果提示 "DedeTag Engine Create File False" 或干脆卡在某一步没反应,这是织梦最常见的生成失败问题。根因集中在目录权限、模板错误、文章数据异常、PHP 资源限制四类,本文给出排查路径。
一、最经典报错:DedeTag Engine Create File False
这条错误的字面意思是"织梦标签引擎无法创建文件",最常见原因是:
1. 静态输出目录不可写
织梦默认静态目录是 /a,部分版本是 /html。目录或子目录权限不对,无法写入 HTML 文件。
2. 栏目 HTML 保存路径不存在
后台 → 核心 → 栏目管理 → 修改栏目 → 高级选项 → "文件保存目录",如果填了 /news/2024 但目录没创建,就会失败。
3. 文章命名规则错误
栏目"文章命名规则"被改成 {typedir}/{aid}.html 之外的非标准格式,无法拼出文件路径。
4. 模板里有错误的 dede 标签
如 {dede:arclist typeid='0' row='10'},typeid=0 在某些版本会触发空指针。
二、按报错信息定位
1. 提示 "Create File False" → 目录权限/路径问题
chmod -R 755 /www/wwwroot/域名/a chown -R www:www /www/wwwroot/域名/a
2. 提示 "DedeTag xxx not found" → 模板标签错误
检查模板里调用的标签是否存在、是否拼写正确、是否漏了结束标签。
3. 提示 "Fatal error: Allowed memory size..." → PHP 内存不足
memory_limit=256M max_execution_time=0
4. 提示 "Table xxx doesn't exist" → 数据库表损坏或缺失
REPAIR TABLE dede_archives; REPAIR TABLE dede_addonarticle;
5. 浏览器 504 Gateway Timeout → 生成时间太长
nginx 的 fastcgi_read_timeout 默认 60 秒,超时返回 504。
三、其他典型失败原因
1. 单篇文章有特殊字符
正文里有未转义的 {dede:} 字样、BOM 字符、控制字符,导致模板编译失败。可临时把这篇文档改为"未审核",看其他文章能否生成。
2. 文档 id 跳号、附加表数据缺失
主表有记录但 dede_addonarticle 没对应行,生成时取不到正文,报错。修复:
DELETE FROM dede_archives WHERE id NOT IN (SELECT aid FROM dede_addonarticle);
3. 模板里调用了不存在的自定义函数
模板改过引入了 {dede:php} 调用自定义函数,但函数文件没上传或函数名写错。
4. 安装了非法插件
某些采集/SEO 插件 hook 了生成流程,导致死循环。
/include/dedetag.class.php,在 CreateFile 函数入口加 echo $filename;,能看到具体失败的文件路径。四、命令行生成(绕过浏览器超时)
大站建议直接 SSH 跑命令行生成,不受 nginx/php-fpm 超时限制:
cd /www/wwwroot/域名 php -d memory_limit=512M -d max_execution_time=0 \ dede/makehtml_all.php
也可以分栏目生成:
php -d memory_limit=512M dede/makehtml_list.php typeid=10 php -d memory_limit=512M dede/makehtml_archives.php typeid=10 start=0 end=1000
五、注意事项
1. 修改 php.ini 后必须 systemctl restart php-fpm 才生效。
2. nginx 站点配置里 fastcgi_read_timeout 300 也得调大。
3. 生成前清空 /data/cache/,避免使用旧缓存导致部分文章不更新。
4. 大站分批生成时记录起始 ID,下次接着跑,避免重复劳动。
/a 静态目录,万一新模板有 bug,可以快速回滚老 HTML。织梦生成静态页面失败,原因再复杂也能归到"目录权限、模板语法、数据完整性、PHP 资源"四类。建议站长养成"小批量试生成 → 看报错 → 改对应配置 → 全量生成"的流程,而不是一上来就一键更新全站。大站长期来看把生成改到命令行执行,能彻底告别浏览器超时类失败,是性价比最高的优化动作。