dede每天自动发布如何实现?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文

核心原理

无论使用哪种方法,核心原理都是一样的:

dede每天自动发布
(图片来源网络,侵删)
  1. 提前创建内容:在后台准备好需要在未来发布的文章,但设置其发布时间为未来的某个日期。
  2. 触发脚本:通过一个外部脚本,定期(例如每分钟)检查数据库中是否有已到发布时间的文章。
  3. 执行发布:如果找到,脚本就将其状态从“待发布”改为“已发布”,并生成静态页面。

最关键、最稳定的方法是利用 Linux服务器的计划任务


使用Linux计划任务(最推荐、最稳定)

这是业界标准的做法,利用服务器自带的 cron 服务,定时执行一个PHP脚本来完成发布任务。

步骤1:创建自动发布脚本

  1. 在你的网站根目录下,创建一个新的PHP文件,auto_publish.php
  2. 将以下代码复制并粘贴到 auto_publish.php 文件中:
<?php
/**
 * DedeCMS 自动发布文章脚本
 * 使用方法:通过Linux计划任务,每分钟执行一次此脚本
 */
// 1. 设置数据库连接信息 (请根据你的实际情况修改)
$dbhost = 'localhost'; // 数据库主机
$dbuser = 'your_db_user'; // 数据库用户名
$dbpass = 'your_db_password'; // 数据库密码
$dbname = 'your_db_name'; // 数据库名
$dede_tablepre = 'dede_'; // DedeCMS表前缀,默认是dede_
// 2. 连接数据库
$link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$link) {
    die('Could not connect: ' . mysqli_error($link));
}
mysqli_set_charset($link, "utf8");
// 3. 查询当前时间之前、状态为“待发布”(article.arcrank=-1)的文章
$sql = "SELECT * FROM `{$dede_tablepre}archives` WHERE `senddate` < UNIX_TIMESTAMP() AND `arcrank` = -1";
$result = mysqli_query($link, $sql);
if ($result && mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        $aid = $row['id']; // 文章ID
        // 4. 更新文章状态为“已审核”(arcrank=0)
        $update_sql = "UPDATE `{$dede_tablepre}archives` SET `arcrank` = 0 WHERE `id` = {$aid}";
        mysqli_query($link, $update_sql);
        // 5. 调用DedeCMS的发布函数,生成HTML文件
        // 引入DedeCMS的核心文件
        require_once(dirname(__FILE__) . '/include/dedesql.class.php');
        // 创建一个DedeSQL实例
        $dsql = new Dedesql(false);
        // 执行发布操作
        $arc = new Archives($aid);
        $arc->MakeHtml();
        echo "文章ID: {$aid} 已成功发布于 " . date('Y-m-d H:i:s') . "\n";
    }
} else {
    // 没有找到待发布的文章
    echo date('Y-m-d H:i:s') . " - 暂无需要发布的文章,\n";
}
// 6. 关闭数据库连接
mysqli_close($link);
?>

代码说明:

  • 请务必修改顶部的数据库连接信息($dbuser, $dbpass, $dbname)和表前缀($dede_tablepre)。
  • senddate 字段存储的是文章的发布时间戳(UNIX时间戳)。
  • arcrank 字段控制文章状态:-1 表示待审核(未发布),0 表示已审核(已发布)。
  • 脚本通过引入DedeCMS的核心类 Archives 来调用其自带的 MakeHtml() 方法,确保生成的HTML路径、缩略图等都正确无误。

步骤2:上传脚本并设置权限

  1. 使用FTP或文件管理器,将 auto_publish.php 文件上传到你的网站根目录(与 index.php 同级)。
  2. 通过SSH连接到你的Linux服务器,执行以下命令给脚本添加可执行权限:
    chmod +x /path/to/your/website/auto_publish.php

    (请将 /path/to/your/website 替换为你的网站实际路径)

    dede每天自动发布
    (图片来源网络,侵删)

步骤3:配置Linux计划任务(Cron Job)

  1. 通过SSH登录到你的服务器。

  2. 输入 crontab -e 命令来编辑计划任务列表,如果是第一次,可能会让你选择一个编辑器(如 nano),选择一个你熟悉的即可。

  3. 在打开的文件末尾,添加以下一行代码:

    * * * * * /usr/bin/php -q /path/to/your/website/auto_publish.php > /dev/null 2>&1

    这行代码的含义:

    • 表示每分钟执行一次,你可以根据需要调整,0 * * * * 表示每小时整点执行一次。
    • /usr/bin/php:指定PHP的执行路径,如果不确定,可以通过 which php 命令来查找。
    • -q:安静模式,不输出HTTP头信息。
    • /path/to/your/website/auto_publish.php:这是你上传的脚本文件的绝对路径
    • > /dev/null 2>&1:将脚本的输出重定向到 /dev/null,避免产生大量的邮件日志,保持服务器整洁。
  4. 保存并退出编辑器(在 nano 中是 Ctrl+X,然后按 Y,再按 Enter)。

完成! 从现在开始,你的服务器会每分钟自动运行一次这个脚本,检查并发布所有已到时间的文章。


使用Windows计划任务(适用于Windows服务器)

如果你的网站运行在Windows服务器上,可以使用任务计划程序来实现类似的功能。

  1. 创建脚本:与方法一相同,创建 auto_publish.php 文件并上传到网站根目录。
  2. 打开任务计划程序:在服务器上搜索并打开“任务计划程序”。
  3. 创建基本任务
    • 在右侧操作栏点击“创建基本任务...”。
    • 名称:输入一个名称,如“DedeCMS自动发布”。
    • 触发器:选择“每天”,然后设置开始时间和重复间隔(每隔1分钟重复一次)。
    • 操作:选择“启动程序”。
    • 程序或脚本:点击“浏览”,找到PHP的执行文件(通常是 php.exe 的完整路径,如 C:\php\php.exe)。
    • 添加参数(可选):输入 -f,然后点击“浏览”,选择你上传的 auto_publish.php 文件的完整路径。
    • 起始于(可选):输入你的网站根目录的完整路径。
  4. 完成:点击“完成”,任务计划就创建好了。

使用DedeCMS自带的功能(较旧版本)

一些非常老的DedeCMS版本可能内置了“定时发布”功能,通常在“系统” -> “计划任务”里,但这个功能在新版本中已被移除或不再可靠,强烈不推荐使用,因为它依赖于网站本身的访问量来触发,如果网站一段时间没有访问,任务就不会执行。


使用方法总结与建议

方法 优点 缺点 推荐度
Linux计划任务 稳定、可靠、不依赖网站访问,是标准做法。 需要SSH操作权限,对新手稍有门槛。 ★★★★★ (最推荐)
Windows计划任务 稳定、可靠,不依赖网站访问。 仅适用于Windows服务器。 ★★★★☆ (Windows服务器首选)
DedeCMS自带功能 无需额外代码。 不可靠,依赖网站访问,已在新版中废弃。 ☆☆☆☆☆ (不推荐)

最佳实践:

  1. 提前准备:每天花点时间,把未来几天要发布的文章都写好,设置好未来的 发布时间,然后保存为“待审核”状态。
  2. 设置脚本:按照方法一或方法二,设置好自动发布脚本和计划任务。
  3. 检查日志:为了确保脚本正常运行,你可以修改 auto_publish.php,将 > /dev/null 2>&1 改为 >> /path/to/your/website/auto_publish.log 2>&1,这样,每次执行的日志都会追加到 auto_publish.log 文件中,方便你检查是否有错误发生。

这样,你的DedeCMS网站就能实现完全自动化的每日内容更新了。

-- 展开阅读全文 --
头像
strcmp源码是如何比较字符串的?
« 上一篇 昨天
c语言iconv函数如何正确使用编码转换?
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码

目录[+]