理解“定时更新”的原理
我们要明白织梦(DedeCMS)本身没有内置一个叫“定时更新”的官方插件,所谓的“定时更新插件”,通常是指利用以下几种技术之一来实现自动化内容的发布和更新:

(图片来源网络,侵删)
- 服务器端计划任务:这是最常用、最稳定、最强大的方式,通过设置服务器的 Cron Job (定时任务),让服务器在指定的时间(每天凌晨3点)自动访问一个特定的PHP脚本,这个脚本会执行织梦的后台操作,如:采集、生成HTML、发布文章等。
- 前台JS定时刷新:这种方式比较初级,通常是在首页的某个角落放置一段JavaScript代码,让页面每隔一段时间(10分钟)自动刷新一次,这种方式不能发布新内容,只能让搜索引擎蜘蛛觉得网站“活跃”,可能会重新抓取页面,对SEO有一定帮助,但作用有限。
- 第三方平台推送:通过一些SEO工具或平台,定时将您网站的新内容URL推送给搜索引擎,这本身不更新网站,但能加速收录。
对于真正意义上的“定时更新”(比如定时发布文章、定时生成首页),服务器Cron任务 + 自定义PHP脚本是最佳方案。
推荐方案:使用Cron任务 + 自定义脚本
这种方法的核心是:创建一个脚本文件,然后用服务器的定时任务去定期调用它。
第一步:创建定时更新脚本
- 在您的网站根目录下,创建一个新的PHP文件,例如命名为
auto_update.php。 - 将以下代码复制并粘贴到
auto_update.php文件中。
<?php
/**
* 织梦CMS定时更新任务脚本
* 请将此文件上传到网站根目录,并通过Cron任务定时访问
*/
// 1. 引入织梦的核心文件
// 如果您的网站安装在子目录,请修改路径,require_once('dede/config.php');
require_once(dirname(__FILE__)."/include/common.inc.php");
require_once(DEDEINC."/arc.partview.class.php");
// 2. 定义要更新的栏目ID或首页模板
// 请在这里填入您需要更新的栏目ID,多个ID用逗号隔开,留空则更新首页。
// $updateChannelIds = '1,5,8,10';
$updateChannelIds = '';
// 3. 定义要更新的首页模板文件名
// 默认是index.htm,如果您的首页模板是别的,请修改
$homeFile = 'index.htm';
// ========================================
// 以下代码通常无需修改
// ========================================
echo "织梦定时更新任务开始执行...<br />\n";
echo "执行时间: " . date('Y-m-d H:i:s') . "<br />\n";
// 更新首页
echo "正在更新首页...<br />\n";
$pv = new PartView();
$pv->SetTemplet($cfg_basedir . $cfg_templet_dir . "/" . $homeFile);
$pv->SaveToHtml($cfg_basedir . $homeFile);
echo "首页更新完成!<br />\n";
// 如果指定了栏目ID,则更新指定栏目
if (!empty($updateChannelIds)) {
$channelIds = explode(',', $updateChannelIds);
echo "开始更新指定栏目...<br />\n";
foreach ($channelIds as $cid) {
$tid = intval($cid);
if ($tid > 0) {
echo "正在更新栏目ID: {$tid} ...<br />\n";
$pv = new PartView($tid);
$pv->SetTemplet($pv->MakeTemplet()); // 使用栏目默认模板
$pv->SaveToHtml();
echo "栏目ID: {$tid} 更新完成!<br />\n";
}
}
echo "所有指定栏目更新完成!<br />\n";
}
echo "任务执行完毕!<br />\n";
echo "执行结束时间: " . date('Y-m-d H:i:s') . "<br />\n";
?>
脚本说明:
- 这个脚本会更新您的网站首页,并根据您设置的
$updateChannelIds变量更新指定的栏目。 - 重要:请务必修改
$updateChannelIds和$homeFile这两个变量,使其符合您的网站实际情况。
第二步:通过Cron任务定时调用脚本
您需要设置服务器的定时任务,让它定期访问 auto_update.php 这个文件。

(图片来源网络,侵删)
如何找到Cron设置?
- 虚拟主机用户:登录您的虚拟主机控制面板(如cPanel、Plesk、宝塔面板等),在里面找到“计划任务”(Cron Jobs)或“任务计划”选项。
- VPS/云服务器用户:通过SSH连接服务器,直接编辑
/etc/crontab文件,或者使用crontab -e命令来编辑当前用户的定时任务。
Cron任务命令示例
假设您的网站域名是 www.yourdomain.com,那么访问脚本的URL就是 http://www.yourdomain.com/auto_update.php。
-
宝塔面板设置:
(图片来源网络,侵删)- 进入宝塔面板 -> 计划任务。
- 点击“添加任务”。
- 任务类型:选择“访问URL”。
- 执行周期:选择您需要的频率,每天”。
- 执行时间:设置一个具体时间,03:00”。
- URL地址:填入
http://www.yourdomain.com/auto_update.php。 - 备注:写上“织梦定时更新网站”。
- 点击“添加”。
-
Linux服务器Crontab命令: 在SSH中输入
crontab -e,然后添加以下一行代码,表示每天凌晨3点执行一次。0 3 * * * /usr/bin/wget -q -O /dev/null http://www.yourdomain.com/auto_update.php
0 3 * * *:表示分(0) 时(3) 日() 月() 周(*),即每天3点整。/usr/bin/wget:使用wget命令来访问URL,请确保您的服务器已安装wget,如果没有,可以用curl替换:0 3 * * * /usr/bin/curl -s http://www.yourdomain.com/auto_update.php > /dev/null 2>&1
-q -O /dev/null:表示静默模式,不输出任何内容,并将结果丢弃,避免产生邮件。
高级应用:定时发布文章(需要二次开发)
如果您需要实现定时发布新文章的功能,这超出了简单脚本的范围,需要对织梦进行二次开发。
基本思路:
- 后台扩展:在织梦后台的文章发布页面,增加一个“发布时间”字段,并使用日期时间选择器。
- 修改发布逻辑:修改织梦处理文章发布的PHP文件(通常是
dede/article_add.php),增加判断逻辑:如果设置的发布时间是未来的时间,则将文章状态设置为“待审核”或“未发布”,并保存到数据库,但不立即生成HTML。 - 编写发布脚本:编写一个PHP脚本(
publish_articles.php),这个脚本会查询数据库中所有状态为“待发布”且当前时间已超过其“发布时间”的文章。 - 执行发布:对于查到的每篇文章,调用织梦内部的方法将其状态改为“已发布”,并重新生成该文章的HTML页面。
- 设置Cron任务:和前面一样,设置一个Cron任务(例如每5分钟或每小时运行一次)来执行
publish_articles.php脚本。
这个功能比较复杂,如果您需要,可以寻找专门提供织梦二次开发的程序员来完成。
注意事项
- 文件权限:确保
auto_update.php和它将要生成的HTML文件(如index.htm)具有正确的读写权限(通常是755或644)。 - 服务器环境:确保您的服务器支持Cron任务和PHP脚本执行。
- 脚本安全:
auto_update.php文件不应该被公开访问,为了安全,您可以在执行完Cron任务后,将其从服务器删除,或者将其重命名为一个复杂的、不易猜测的文件名。 - 测试:在设置Cron任务前,最好先手动在浏览器中访问
http://www.yourdomain.com/auto_update.php,看看是否能正常执行并更新网站。 - 性能:如果网站栏目非常多,一次性生成所有页面可能会占用较多服务器资源,建议分时段、分批次更新。
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Cron + 自定义脚本 | 功能强大、稳定可靠、可自定义 | 需要手动创建文件和设置服务器任务 | 强烈推荐,用于定时生成首页、栏目页,保持网站活跃。 |
| 前台JS定时刷新 | 实现简单,无需服务器权限 | 功能有限,不能发布新内容,仅能刷新页面 | 适用于小型网站,仅为了让蜘蛛认为网站有更新。 |
| 定时发布文章 | 功能最完善,自动化程度高 | 需要二次开发,代码复杂 | 量巨大、需要完全无人值守运营的网站。 |
对于绝大多数用户来说,使用Cron任务调用我上面提供的 auto_update.php 脚本,是解决“织梦定时更新网站”需求最直接、最有效的方法。
