织梦数据如何导入phpcms?

99ANYc3cd6
预计阅读时长 28 分钟
位置: 首页 织梦建站 正文

“数据提取 + 数据转换 + 数据导入”,下面我将为你提供一个详细的、分步的指南,涵盖从准备到验证的完整流程。

如何把织梦数据导入phpcms
(图片来源网络,侵删)

第一步:准备工作(至关重要!)

在开始任何操作之前,请务必做好备份,以防数据丢失或操作失误。

  1. 完整备份源站(织梦CMS)和目标站(PHPCMS)

    • 备份织梦CMS的网站根目录、数据库(data目录下的数据库文件)。
    • 备份PHPCMS的网站根目录、数据库。
    • 强烈建议:在本地或测试服务器上操作,不要在生产环境直接操作。
  2. 了解两个系统的数据结构

    • 织梦CMS
      • 表前缀:通常是 dede_ (可自定义)。
      • 核心表:
        • dede_archives: 文章主表,存储文章ID、标题、关键字、作者、发布时间等。
        • dede_addonarticle: 文章附加表,存储文章内容、来源、点击量等。
        • dede_arctype: 栏目表,存储栏目ID、名称、父ID、目录、模板等。
        • dede_arcrank: 文章级别表(如:普通会员、投稿、管理员等)。
        • dede_admin: 管理员表。
    • PHPCMS
      • 表前缀:通常是 v9_ (可自定义)。
      • 核心表:
        • v9_news: 文章主表(对应PHPCMS的“文章”模型)。
        • v9_news_data: 文章数据表,存储文章内容、来源、点击量等。
        • v9_category: 栏目表。
        • v9_member: 会员表。
        • v9_admin: 管理员表。
  3. 创建临时数据库和目录结构

    如何把织梦数据导入phpcms
    (图片来源网络,侵删)
    • 在PHPCMS的数据库中,创建一个新的临时数据库,用于存放转换后的数据,避免污染现有数据。
    • 在PHPCMS的 caches 目录下,创建一个临时文件夹(如 dede_temp),用于存放你的转换脚本。

第二步:数据提取(从织梦导出)

最简单的方式是使用织梦后台的“数据备份/还原”功能。

  1. 登录织梦CMS后台。
  2. 进入【系统】-> 【数据库备份/还原】
  3. 选择【数据备份】,勾选你需要导出的表:
    • 必须导出dede_archives, dede_addonarticle, dede_arctype
    • 可选导出dede_admin (如果需要转移管理员), dede_member (如果需要转移会员), dede_tagindex, dede_taglist (如果需要转移标签)。
  4. 点击【开始备份】,等待备份完成,你会在 data/databackup/ 目录下得到一个或多个 .sql 文件。

第三步:数据转换(核心步骤)

这是最关键、最复杂的一步,你需要编写一个PHP脚本,将织梦的SQL数据读取、处理后,插入到PHPCMS的对应表中。

手动编写转换脚本(推荐,最灵活)

在你的 caches/dede_temp 目录下创建一个 convert.php 文件,然后编写代码。

脚本逻辑:

如何把织梦数据导入phpcms
(图片来源网络,侵删)
  1. 连接数据库:同时连接织梦的数据库和PHPCMS的临时数据库。
  2. 栏目转换
    • 从织梦的 dede_arctype 表读取所有栏目。
    • 遍历每个栏目,将其信息映射到PHPCMS的 v9_category 表。
    • 注意字段映射
      • dede_arctype.id -> v9_category.catid (需要重新生成ID)
      • dede_arctype.typename -> v9_category.catname
      • dede_arctype.reid -> v9_category.parentid (顶级栏目为0)
      • dede_arctype.typedir -> v9.category.url (需要根据PHPCMS的规则重新生成)
      • dede_arctype.defaultname -> v9.category.modelid (PHPCMS中文章模型的ID通常是1)
    • 生成新ID:由于PHPCMS的栏目ID是自增的,你不能直接使用织梦的ID,你需要先获取PHPCMS当前最大的栏目ID,然后新栏目ID在此基础上+1。
  3. 文章转换
    • 从织梦的 dede_archivesdede_addonarticle 表中读取文章数据(JOIN 连接)。
    • 遍历每篇文章,将其信息映射到PHPCMS的 v9_newsv9_news_data 表。
    • 注意字段映射
      • 栏目ID:这是最容易出错的地方,你需要建立一个“织梦栏目ID”到“PHPCMS栏目ID”的映射数组$map_catid[织梦栏目ID] = PHPCMS栏目ID;
      • dede_archives.id -> v9_news.id (同样需要重新生成)
      • dede_archives.title -> v9_news.title
      • dede_archives.pubdate -> v9_news.updatetime (PHPCMS常用更新时间)
      • dede_addonarticle.body -> v9_news_data.content
      • dede_addonarticle.source -> v9_news_data.source
      • dede_addonarticle.click -> v9_news_data.click
    • 内容处理:织梦的编辑器生成的内容(如图片路径、<img>标签中的src)可能需要批量替换,指向新的域名或目录。
  4. 执行插入:使用 INSERT INTO ... VALUES ... 语句将处理好的数据插入到PHPCMS的临时数据库表中。

示例代码片段(仅供参考)

<?php
// convert.php
// --- 1. 数据库配置 ---
$db_dede = [
    'host' => 'localhost',
    'user' => 'dede_user',
    'pass' => 'dede_pass',
    'dbname' => 'dede_db',
    'prefix' => 'dede_'
];
$db_phpcms = [
    'host' => 'localhost',
    'user' => 'phpcms_user',
    'pass' => 'phpcms_pass',
    'dbname' => 'phpcms_temp_db', // 临时数据库
    'prefix' => 'v9_'
];
// --- 2. 连接数据库 ---
$conn_dede = mysqli_connect($db_dede['host'], $db_dede['user'], $db_dede['pass'], $db_dede['dbname']);
$conn_phpcms = mysqli_connect($db_phpcms['host'], $db_phpcms['user'], $db_phpcms['pass'], $db_phpcms['dbname']);
if (!$conn_dede || !$conn_phpcms) {
    die("数据库连接失败!");
}
mysqli_set_charset($conn_dede, 'utf8');
mysqli_set_charset($conn_phpcms, 'utf8');
// --- 3. 栏目转换 ---
$catid_map = []; // 用于存储新旧栏目ID的映射关系
// 获取PHPCMS当前最大栏目ID
$sql_max_catid = "SELECT MAX(catid) as max_id FROM {$db_phpcms['prefix']}category";
$result = mysqli_query($conn_phpcms, $sql_max_catid);
$row = mysqli_fetch_assoc($result);
$new_catid_start = $row['max_id'] + 1;
// 查询织梦所有栏目
$sql_dede_cats = "SELECT * FROM {$db_dede['prefix']}arctype";
$result_dede_cats = mysqli_query($conn_dede, $sql_dede_cats);
while ($cat = mysqli_fetch_assoc($result_dede_cats)) {
    $old_catid = $cat['id'];
    $new_catid = $new_catid_start++;
    // 构建插入PHPCMS的数据
    $phpcms_cat = [
        'catid' => $new_catid,
        'catname' => $cat['typename'],
        'parentid' => $cat['reid'] == 0 ? 0 : $catid_map[$cat['reid']], // 注意:父栏目必须先转换
        'modelid' => 1, // 假设文章模型ID为1
        'url' => 'category.php?catid=' . $new_catid, // 简单示例,实际应根据PHPCMS规则生成
        'listorder' => $cat['sortrank'],
        'display' => $cat['isdefault'],
    ];
    // ... 执行插入到 v9_category 表 ...
    // 记录映射关系
    $catid_map[$old_catid] = $new_catid;
}
// --- 4. 文章转换 ---
// 获取PHPCMS当前最大文章ID
$sql_max_news_id = "SELECT MAX(id) as max_id FROM {$db_phpcms['prefix']}news";
$result = mysqli_query($conn_phpcms, $sql_max_news_id);
$row = mysqli_fetch_assoc($result);
$new_newsid_start = $row['max_id'] + 1;
// 查询织梦所有文章
$sql_dede_articles = "SELECT a.*, ad.* FROM {$db_dede['prefix']}archives a LEFT JOIN {$db_dede['prefix']}addonarticle ad ON a.id = aid";
$result_dede_articles = mysqli_query($conn_dede, $sql_dede_articles);
while ($article = mysqli_fetch_assoc($result_dede_articles)) {
    $old_catid = $article['typeid'];
    $new_catid = $catid_map[$old_catid];
    $new_newsid = $new_newsid_start++;
    // 插入主表 v9_news
    $sql_news = "INSERT INTO {$db_phpcms['prefix']}news (id,catid,catid_1,catid_2,catid_3,title,style,color,keywords,description,username,updatetime,status) 
                 VALUES ($new_newsid, $new_catid, $new_catid, $new_catid, '{$article['title']}', '', '', '{$article['keywords']}', '{$article['description']}', '{$article['adminid']}', {$article['pubdate']}, 99)";
    mysqli_query($conn_phpcms, $sql_news);
    // 插入数据表 v9_news_data
    $sql_news_data = "INSERT INTO {$db_phpcms['prefix']}news_data (id, content, source, click) 
                      VALUES ($new_newsid, '{$article['body']}', '{$article['source']}', {$article['click']})";
    mysqli_query($conn_phpcms, $sql_news_data);
}
echo "转换完成!";
mysqli_close($conn_dede);
mysqli_close($conn_phpcms);
?>

使用现成的转换工具(谨慎使用)

网上可能有一些第三方开发的织梦转PHPCMS的转换工具或程序。使用这些工具存在风险

  • 安全性:工具可能包含恶意代码。
  • 兼容性:可能与你特定版本的织梦或PHPCMS不兼容。
  • 功能:可能无法完美处理所有数据,特别是自定义字段。

如果你决定使用,请务必:

  1. 从可靠的来源下载。
  2. 在本地测试环境中先运行。
  3. 仔细检查转换后的数据。

第四步:数据导入(导入PHPCMS)

当你通过脚本成功将数据转换到PHPCMS的临时数据库后,就可以进行导入了。

  1. 验证数据:登录PHPCMS后台,连接到你的临时数据库,检查 v9_categoryv9_news 表中的数据是否正确。
  2. 正式导入
    • 登录PHPCMS后台,进入【系统】-> 【数据库备份/还原】
    • 选择【数据还原】,选择你临时数据库中的 v9_categoryv9_news 等表。
    • 点击【开始还原】,将数据导入到PHPCMS的主数据库中。
  3. 替换前缀:如果你的PHPCMS安装时使用了非 v9_ 的表前缀,请确保在导入时或之后,将临时表中的数据导入到正确前缀的表中。

第五步:收尾工作

数据导入后,还有一些工作需要完成。

  1. 更新栏目缓存:在PHPCMS后台,进入【内容】-> 【栏目管理】,点击“更新栏目缓存”,以确保后台能正确显示所有栏目。
  2. 伪静态设置:检查PHPCMS的URL规则设置,确保文章和栏目的链接格式正确。
  3. 内容替换:检查文章内容中的图片路径、链接等,是否需要批量替换为新的域名或路径。
  4. 清理临时文件:删除临时数据库和转换脚本。
  5. 最终测试:在前台和后台全面测试,确保文章能正常显示、能被正常点击、栏目能正常跳转。

总结与建议

  • 难度:这是一个中高级的技术任务,需要对PHP和MySQL有一定了解。
  • 时间成本:手动编写脚本可能需要数小时甚至更长时间,具体取决于网站的数据量和复杂度。
  • 替代方案:如果数据量不大,或者你对技术不自信,可以考虑手动复制粘贴,虽然耗时耗力,但最安全可控,对于重要内容,可以只转换核心文章,舍弃一些不重要的数据。
  • 寻求帮助:如果你在某个环节卡住了,可以去PHPCMS或织梦的官方论坛、社区寻求有经验用户的帮助,并附上你的数据结构和遇到的具体问题。

祝你迁移顺利!

-- 展开阅读全文 --
头像
dede css/js文件目录如何安全优化管理?
« 上一篇 2025-12-16
dedecms织梦大学学院模板怎么用?
下一篇 » 2025-12-16

相关文章

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

目录[+]