批量更新文档是织梦静态化模式下的核心维护操作,掌握工具使用可大幅缩短内容上线时间。
一、批量更新工具的原理
织梦静态化机制将动态数据写入 dede_archives 表,通过 makehtml_archives.php 调用 arc.archives.class.php 渲染模板,生成 HTML 文件到 /a/ 目录。批量更新即将该过程循环执行于多个 ID。
二、后台批量更新入口
一键更新
更新所有栏目、首页、专题更新栏目
按栏目生成列表页更新文档
指定 ID 范围生成更新主页
仅生成首页 HTML路径:后台 → 生成 → 各类批量更新菜单。
三、操作步骤
- 后台 → 生成 → 一键更新网站。
- 选择"更新所有"或指定栏目。
- 设置每批处理数量(建议 50-100 避免超时)。
- 点击开始,等待进度条完成。
- 完成后访问前台验证页面。
四、命令行批量更新脚本
对于数万条文档,后台界面易超时,推荐 CLI 脚本:
<?php
// /www/wwwroot/yoursite/cli_makehtml.php
require_once(dirname(__FILE__).'/include/common.inc.php');
require_once(DEDEADMIN.'/../include/makehtml_archives.class.php');
$start=isset($argv[1]) ? intval($argv[1]) : 0;
$end=isset($argv[2]) ? intval($argv[2]) : 0;
$sql="SELECT id FROM dede_archives WHERE id BETWEEN $start AND $end ORDER BY id";
$dsql->Execute('me', $sql);
$count=0;
while($row=$dsql->GetArray('me')){
MakeArt($row['id'], true, true);
$count++;
if($count % 100==0){
echo "已生成 {$count} 篇\n";
@ob_flush(); @flush();
}
}
echo "完成,共生成 {$count} 篇\n";
执行:php cli_makehtml.php 1000 2000
五、常见问题原因分析
5.1 更新到一半卡住
原因:PHP max_execution_time 超时、内存溢出、数据库连接断开。
解决:临时调大 set_time_limit(0) 与 memory_limit=512M,并分批执行。
5.2 部分页面未更新
原因:缓存未清理、模板未生效、文档处于未审核状态。
注意:批量更新前建议清理
/data/cache/ 与 /data/tplcache/,否则可能用旧模板渲染。六、性能优化建议
开启 OPcache、调整 InnoDB Buffer Pool、使用 SSD 磁盘可显著提升生成速度。对于超大规模站点(10万+文档),建议采用宝塔队列任务分时段生成,避免单次任务执行数小时。
七、自动化集成
可在文档发布钩子中调用 MakeArt($arcid) 实时生成,避免后续手动批量更新:
// /include/extend.func.php
function autoMakeHtml($arcid){
require_once(DEDEINC.'/arc.archives.class.php');
MakeArt($arcid, true, true);
}
// 在文档保存后调用 autoMakeHtml($arcid)
八、行动指引
梳理全站批量更新流程后,建议根据站点规模配置每日定时任务,凌晨低峰期自动生成。同时建立"更新日志"记录生成耗时,定期优化模板与数据库索引,让更新过程稳定高效,为内容运营提供可靠支撑。