dede数据库如何批量替换图片?

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

使用DedeCMS后台自带的SQL批量替换工具(推荐,最安全)

这是最标准、最安全的方法,因为它直接在数据库层面操作,且DedeCMS已经内置了相关的函数来处理文章内容。

dede数据库批量替换图片
(图片来源网络,侵删)

操作步骤:

  1. 登录DedeCMS后台

    使用您的管理员账号登录网站的后台管理界面。

  2. 进入SQL命令行工具

    dede数据库批量替换图片
    (图片来源网络,侵删)
    • 在后台左侧菜单栏中,找到并点击 【系统】 -> 【SQL命令行工具】
    • 你会看到一个文本框,标题为“运行SQL语句/命令”。
  3. 编写并执行SQL替换命令

    根据你的替换需求,选择以下相应的SQL语句并填入文本框中,然后点击 【提交查询】 按钮。

    场景1:替换图片域名或路径

    这是最常见的情况,比如将 http://old-image.com 替换为 http://new-image.com

    REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, '旧图片地址或域名', '新图片地址或域名');

    示例:

    • 旧域名: http://img.oldsite.com
    • 新域名: http://cdn.newsite.com
    • SQL语句:
      REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, 'http://img.oldsite.com', 'http://cdn.newsite.com');

    场景2:替换图片URL中的某个目录

    将所有 /uploads/allimg/ 路径下的图片移动到 /uploads/images/

    REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, '旧的目录路径', '新的目录路径');

    示例:

    • 旧路径: /uploads/allimg/
    • 新路径: /uploads/images/
    • SQL语句:
      REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, '/uploads/allimg/', '/uploads/images/');

    场景3:同时替换文章摘要中的图片

    有时摘要(description 字段)也可能包含图片,如果需要一并替换,可以执行以下命令:

    REPLACE INTO `dede_archives` SET `description` = REPLACE(`description`, '旧图片地址或域名', '新图片地址或域名');

    示例:

    REPLACE INTO `dede_archives` SET `description` = REPLACE(`description`, 'http://img.oldsite.com', 'http://cdn.newsite.com');
  4. 执行与验证

    • 点击 【提交查询】 后,系统会提示你“成功执行X条SQL语句”,这个X就是被修改的记录数。
    • 非常重要: 执行完毕后,请务必去网站前台随机打开几篇文章,检查图片是否已经成功替换,并且能够正常显示。

使用PHP脚本批量替换(功能更强大,需谨慎)

当你需要更复杂的替换逻辑,或者替换操作不局限于简单的字符串替换时(需要结合正则表达式),可以使用PHP脚本。

操作步骤:

  1. 创建PHP脚本文件

    • 在你的电脑上新建一个文本文件,命名为 replace_img.php
    • 将下面的代码复制并粘贴到该文件中。
    <?php
    // +----------------------------------------------------------------------
    // | DedeCMS 图片批量替换脚本
    // +----------------------------------------------------------------------
    // 数据库配置信息
    $dbhost = 'localhost'; // 数据库主机
    $dbuser = 'root';      // 数据库用户名
    $dbpass = 'password';  // 数据库密码
    $dbname = 'dedecms';   // 数据库名
    $dbprefix = 'dede_';   // 数据库表前缀,如果你的不是dede_,请修改
    // --- 替换规则 ---
    // 1. 要被替换的旧字符串(可以是域名、路径等)
    $old_string = 'http://old-image.com';
    // 2. 要替换成的新字符串
    $new_string = 'http://new-image.com';
    // 连接数据库
    $link = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
    if (!$link) {
        die('连接数据库失败: ' . mysqli_error($link));
    }
    mysqli_set_charset($link, 'utf8');
    // 查询所有文章内容
    $query = "SELECT id, body FROM {$dbprefix}addonarticle";
    $result = mysqli_query($link, $query);
    if (mysqli_num_rows($result) > 0) {
        $updated_count = 0;
        // 遍历每一篇文章
        while ($row = mysqli_fetch_assoc($result)) {
            $article_id = $row['id'];
            $old_body = $row['body'];
            // 执行替换
            $new_body = str_replace($old_string, $new_string, $old_body);
            // 如果内容有变化,则更新数据库
            if ($new_body !== $old_body) {
                $update_query = "UPDATE {$dbprefix}addonarticle SET body = '{$new_body}' WHERE id = {$article_id}";
                if (mysqli_query($link, $update_query)) {
                    $updated_count++;
                    echo "文章ID {$article_id} 替换成功。<br>";
                } else {
                    echo "文章ID {$article_id} 替换失败: " . mysqli_error($link) . "<br>";
                }
            }
        }
        echo "<hr>";
        echo "替换操作完成!共更新了 {$updated_count} 篇文章。";
    } else {
        echo "没有找到任何文章。";
    }
    // 关闭数据库连接
    mysqli_close($link);
    ?>
  2. 修改脚本配置

    • 打开 replace_img.php 文件,修改顶部的数据库配置信息:
      • $dbuser: 你的数据库用户名
      • $dbpass: 你的数据库密码
      • $dbname: 你的数据库名
      • $dbprefix: 你的DedeCMS数据库表前缀(默认是 dede_,如果不是请务必修改)
    • 修改 $old_string$new_string 的值,为你自己的旧图片地址和新图片地址。
  3. 上传并执行脚本

    • 将修改好的 replace_img.php 文件通过FTP上传到你网站的 根目录 下。
    • 在浏览器中访问这个文件,http://www.yourdomain.com/replace_img.php
    • 脚本会自动执行并在浏览器中显示替换进度和结果。
  4. 删除脚本

    • 操作完成后,务必立即删除根目录下的 replace_img.php 文件,以免留下安全隐患。

⚠️ 重要注意事项(请务必阅读)

  1. 备份!备份!备份!

    • 在执行任何批量数据库操作之前,务必备份数据库!这是最最重要的一步,可以防止误操作导致网站数据丢失,你可以通过DedeCMS后台的【系统】->【数据库备份/还原】功能进行备份。
  2. 检查表前缀

    • 如果你的DedeCMS安装时修改了数据库表前缀(cms_),请在所有SQL语句或PHP脚本中,将 dede_ 替换为你自己的表前缀。
  3. 区分全站和部分替换

    • 如果只想替换特定栏目下的图片,可以在SQL语句中增加 typeid 的条件,只替换栏目ID为5和10下的文章:
      REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, '旧地址', '新地址') WHERE typeid IN (5, 10);
  4. 绝对路径与相对路径

    • 替换时,建议使用 完整的、带协议的绝对路径(如 http://...https://...),这样可以避免因网站访问方式(http/https)不同导致的问题。
  5. 谨慎操作

    执行前,先在本地测试环境(如本地服务器)上验证脚本或SQL语句的正确性,确认无误后再在生产环境(正式网站)上操作。

对于绝大多数用户,强烈推荐使用【方法一:后台SQL命令行工具】,因为它安全、便捷,且是DedeCMS官方支持的方式,只有在有特殊需求时,才考虑使用【方法二:PHP脚本】。

-- 展开阅读全文 --
头像
C语言变量名能含哪些字符?
« 上一篇 02-05
如何删除织梦频道模型?
下一篇 » 02-05

相关文章

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

目录[+]