“一键更新”通常包含两个层面:

- 手动一键更新:在后台点击一个按钮,完成所有需要更新的操作。
- 定时自动更新:设置一个任务,让系统在固定时间(比如每天凌晨)自动执行更新,无需人工干预。
下面我将分步为你讲解如何实现这两种方式。
第一部分:手动“一键更新”实现方法
这是最基础也是最直接的方法,你只需要在 DedeCMS 后台的几个关键位置点击更新即可。
核心思路: 按照依赖关系,从底层到顶层依次更新。
标准操作流程(请按顺序执行):

-
更新文档HTML:
- 进入后台 -> 系统 -> 一键更新 -> 更新文档HTML。
- 这里有两个选项:
- 仅动态更新:只更新设置为“仅动态”的文档,速度快,但访问时需要调用PHP。
- 生成HTML:将所有文档生成静态HTML文件,对服务器CPU有轻微负载,但访问速度快。
- 建议:选择 生成HTML,然后点击“开始更新”,这是最彻底的更新。
-
更新栏目HTML:
- 在同一个“一键更新”页面,找到 更新栏目HTML。
- 点击“开始更新”,这会重新生成所有栏目列表页的HTML文件。
-
更新首页HTML:
- 继续在同一页面,找到 更新首页HTML。
- 点击“开始更新”,重新生成网站首页的HTML文件。
-
更新其他缓存:
- 进入后台 -> 系统 -> 系统设置 -> 系统基本参数 -> 性能选项。
- 在页面底部,你会看到 “更新系统缓存” 按钮,点击它,这会更新网站的核心配置缓存,确保最新的设置生效。
按照 文档 -> 栏目 -> 首页 -> 系统缓存 这个顺序点击一遍,就完成了最完整的手动一键更新。
第二部分:定时自动更新实现方法
这才是真正的“自动化”,我们可以利用 Linux 系统的 Crontab 定时任务功能,让服务器在指定时间自动执行后台的更新脚本。
实现步骤:
步骤 1:创建一个可被外部调用的PHP更新脚本
我们需要一个脚本,用来模拟点击后台更新按钮的动作。
-
创建脚本文件: 在你的网站根目录(与
/dede文件夹同级的目录)下,创建一个新文件,auto_update.php。 -
编写脚本代码: 将以下代码复制并粘贴到
auto_update.php文件中。<?php /** * DedeCMS 自动更新脚本 * 使用方法: 通过定时任务调用此脚本 */ // 设置网站根目录,如果此文件不在根目录,请修改路径 define('DEDEROOT', dirname(__FILE__)); // 引入数据库配置文件 require_once DEDEROOT . '/data/config.php'; // 引入dede核心文件 require_once DEDEROOT . '/dede/include/common.inc.php'; // 检查登录状态(如果需要,可以跳过,直接执行更新逻辑) // 如果你的后台有登录验证,这里需要处理session,但为了自动化,我们直接调用更新函数。 echo "===== 开始自动更新 DedeCMS ===== \n"; // 1. 更新文档HTML echo "正在更新文档HTML... \n"; $dopost = 'all'; $channelid = -1; $startid = 0; $idend = 0; $typeid = 0; $mkvalue = ''; $arcmode = 0; $typearray = ''; $pagesize = 100; $isremote = 0; $startpage = 1; $endpage = 1; // 调用更新文档的函数 $arcser = new Archives(); $arcser->MakeHtml($dopost, $channelid, $startid, $idend, $typeid, $mkvalue, $arcmode, $typearray, $pagesize, $isremote, $startpage, $endpage); echo "文档HTML更新完成! \n"; // 2. 更新栏目HTML echo "正在更新栏目HTML... \n"; $typeid = 0; // 0 表示更新所有栏目 $isremote = 0; // 调用更新栏目的函数 $cSer = new TypeClass(); $cSer->TypeList($typeid, $isremote); echo "栏目HTML更新完成! \n"; // 3. 更新首页HTML echo "正在更新首页HTML... \n"; $isremote = 0; // 调用更新首页的函数 $memberv = new MemberView(); $memberv->ShowIndex(); echo "首页HTML更新完成! \n"; // 4. 更新系统缓存 (可选,但推荐) echo "正在更新系统缓存... \n"; $dsql->ExecuteNoneQuery("DELETE FROM `#@__syscache`"); echo "系统缓存已清空,下次访问时会自动重建。 \n"; echo "===== 自动更新全部完成 ===== \n"; ?>代码说明:
- 这个脚本直接调用了 DedeCMS 内部的类和方法来执行更新,模拟了后台的操作。
echo语句是为了在命令行执行时能看到日志,方便排查问题。- 你可以根据需要调整更新逻辑,比如只更新部分栏目等。
步骤 2:设置服务器定时任务 (Crontab)
我们需要告诉服务器在每天固定时间执行这个 auto_update.php 脚本。
-
登录你的服务器: 通过 SSH 连接到你的 Linux 服务器。
-
编辑 Crontab: 输入命令
crontab -e,然后按 Enter,如果是第一次使用,会让你选择一个编辑器(nano),按 Enter 即可。 -
添加定时任务: 在打开的文件末尾,添加下面这一行代码。
# 每天凌晨2点自动更新DedeCMS网站 0 2 * * * /usr/bin/php -f /www/wwwroot/你的网站域名/auto_update.php > /www/wwwroot/你的网站域名/cron_log.log 2>&1
代码解释:
0 2 * * *:这是时间设置,表示 每天凌晨2点整 执行。0:分钟 (0-59)2:小时 (0-23)- 日期 (1-31)
- 月份 (1-12)
- 星期 (0-7)
/usr/bin/php:这是你服务器上 PHP 的可执行文件路径。你需要确认这个路径是否正确,可以通过which php命令来查找。-f:表示 PHP 以文件模式运行。/www/wwwroot/你的网站域名/auto_update.php:这是你上一步创建的脚本的绝对路径,请务必修改成你自己的路径。> /www/wwwroot/你的网站域名/cron_log.log:将脚本的标准输出重定向到一个日志文件中,方便查看执行结果。2>&1:将错误输出也重定向到同一个日志文件中。
-
保存并退出: 在 nano 编辑器中,按
Ctrl + X,然后按Y,再按Enter保存。
步骤 3:验证和测试
-
检查 Crontab 是否生效: 输入
crontab -l,你应该能看到你刚刚添加的那行任务。 -
手动测试脚本: 为了确保脚本没有问题,可以先手动执行一次。
/usr/bin/php -f /www/wwwroot/你的网站域名/auto_update.php
执行后,检查网站是否已更新,并查看
cron_log.log文件内容,看是否有报错。 -
等待定时任务执行: 你可以修改时间为几分钟之后(
*/2 * * * *表示每2分钟执行一次),等待几分钟,然后去检查cron_log.log和网站更新情况,确认无误后,再改回你想要的执行时间(如每天凌晨2点)。
重要注意事项
-
文件权限: 确保
auto_update.php文件以及它所在的目录有正确的执行权限,网站文件权限设置为755,PHP 文件权限设置为644。chmod 755 /www/wwwroot/你的网站域名/ chmod 644 /www/wwwroot/你的网站域名/auto_update.php
-
服务器环境: 此方法主要适用于 Linux + Apache/Nginx + PHP 的虚拟主机或 VPS/服务器,如果是 Windows 服务器,则需要使用“计划任务”功能,原理类似,只是设置方式不同。
-
安全考虑:
auto_update.php这个文件拥有很高的权限,可以操作你的网站。请务必将其命名得复杂且不易猜测(d3d3_aut0upd4t3.phpz),并且在更新完成后可以考虑将其删除或重命名,以防被恶意利用。 -
服务器负载: 如果你的网站文章量非常大(几十万甚至上百万),更新所有文档可能会消耗大量服务器资源(CPU、内存),可能导致网站卡顿甚至超时,对于大型网站,建议分时段、分批次更新,或者只更新重要栏目。
通过以上步骤,你就可以轻松实现 DedeCMS 的手动一键更新和定时自动更新了。
