使用DedeCMS后台自带的SQL批量替换工具(推荐,最安全)
这是最标准、最安全的方法,因为它直接在数据库层面操作,且DedeCMS已经内置了相关的函数来处理文章内容。

(图片来源网络,侵删)
操作步骤:
-
登录DedeCMS后台
使用您的管理员账号登录网站的后台管理界面。
-
进入SQL命令行工具
(图片来源网络,侵删)- 在后台左侧菜单栏中,找到并点击 【系统】 -> 【SQL命令行工具】。
- 你会看到一个文本框,标题为“运行SQL语句/命令”。
-
编写并执行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');
- 旧域名:
-
执行与验证
- 点击 【提交查询】 后,系统会提示你“成功执行X条SQL语句”,这个X就是被修改的记录数。
- 非常重要: 执行完毕后,请务必去网站前台随机打开几篇文章,检查图片是否已经成功替换,并且能够正常显示。
使用PHP脚本批量替换(功能更强大,需谨慎)
当你需要更复杂的替换逻辑,或者替换操作不局限于简单的字符串替换时(需要结合正则表达式),可以使用PHP脚本。
操作步骤:
-
创建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); ?> - 在你的电脑上新建一个文本文件,命名为
-
修改脚本配置
- 打开
replace_img.php文件,修改顶部的数据库配置信息:$dbuser: 你的数据库用户名$dbpass: 你的数据库密码$dbname: 你的数据库名$dbprefix: 你的DedeCMS数据库表前缀(默认是dede_,如果不是请务必修改)
- 修改
$old_string和$new_string的值,为你自己的旧图片地址和新图片地址。
- 打开
-
上传并执行脚本
- 将修改好的
replace_img.php文件通过FTP上传到你网站的 根目录 下。 - 在浏览器中访问这个文件,
http://www.yourdomain.com/replace_img.php。 - 脚本会自动执行并在浏览器中显示替换进度和结果。
- 将修改好的
-
删除脚本
- 操作完成后,务必立即删除根目录下的
replace_img.php文件,以免留下安全隐患。
- 操作完成后,务必立即删除根目录下的
⚠️ 重要注意事项(请务必阅读)
-
备份!备份!备份!
- 在执行任何批量数据库操作之前,务必备份数据库!这是最最重要的一步,可以防止误操作导致网站数据丢失,你可以通过DedeCMS后台的【系统】->【数据库备份/还原】功能进行备份。
-
检查表前缀
- 如果你的DedeCMS安装时修改了数据库表前缀(
cms_),请在所有SQL语句或PHP脚本中,将dede_替换为你自己的表前缀。
- 如果你的DedeCMS安装时修改了数据库表前缀(
-
区分全站和部分替换
- 如果只想替换特定栏目下的图片,可以在SQL语句中增加
typeid的条件,只替换栏目ID为5和10下的文章:REPLACE INTO `dede_addonarticle` SET `body` = REPLACE(`body`, '旧地址', '新地址') WHERE typeid IN (5, 10);
- 如果只想替换特定栏目下的图片,可以在SQL语句中增加
-
绝对路径与相对路径
- 替换时,建议使用 完整的、带协议的绝对路径(如
http://...或https://...),这样可以避免因网站访问方式(http/https)不同导致的问题。
- 替换时,建议使用 完整的、带协议的绝对路径(如
-
谨慎操作
执行前,先在本地测试环境(如本地服务器)上验证脚本或SQL语句的正确性,确认无误后再在生产环境(正式网站)上操作。
对于绝大多数用户,强烈推荐使用【方法一:后台SQL命令行工具】,因为它安全、便捷,且是DedeCMS官方支持的方式,只有在有特殊需求时,才考虑使用【方法二:PHP脚本】。
