分享

Wordpress平滑迁移至SupeSite - LittleHZ[叶歆昊] - litt...

 唯易 2009-06-22

Wordpress平滑迁移至SupeSite [ 原创 ]

2009年05月29 22:51:29 by littlehz分享到饭否

0条评论 查看85次

Wordpress是非常优秀的博客系统,完全的国际化utf-8编码多国语言包、丰富的插件支持、丰富的主题包(模板)、详尽的开发人员手册、完善的开源社区支持,因此非官方的Wordpress模板、插件也有非常好的兼容性、符合W3C标准。所以,虽然是博客系统,但借助于丰富的插件,仍可以实现几乎所有CMS系统能实现的功能。不过非常严重的缺点是效率非常低,即时安装了缓存插件以及做大量的服务器端缓存。文章表容量在100条记录以内时,也慢到0.x秒的查询速度(一个简单的页面都会调用至少12次数据库查询,PHP的函数嵌套就非常多层了),这在PHP程序中是非常缓慢的;当数据库文章表的容量在10000条以上时,首页执行时间达到恐怖的5.x秒级别!!

Supesite是康盛创想商业公司的CMS产品,选中它的最主要原因是效率非常高,在几乎不做缓存的情况下,一百万条的数据首页执行时间都能在0.1x秒级别!初始功能丰富,适合国内初学的站长使用。因以前是封闭软件,前段时间刚开源,无开发人员手册,无任何插件接口,无法开发插件,现阶段要修改supesite的逻辑功能只能修改supesite源程序。使用supesite系统的大多是水平不高的站长,建几个采集资讯的垃圾站,开源社区支持不丰富,就连官方的很多代码都不符合W3C标准,所以也别指望目前能有谁开发出非常优秀的supesite插件和模板。不过如果康盛创想能把Supesite像Discuz!论坛那么重视,我相信Supesite能做到国内非常优秀的CMS平台,毕竟他们是有实力开发的,只是目前不够完善。有朋友要问为什么我不选诸如国外的Joomla!、Dupal或者PHPCMS、DedeCMS等其他CMS平台。这里简单说一下国外的CMS平台和Wordpress的优缺点相差不大,国内的PHPCMS和DedeCMS确实做的很优秀,但是我主要看到了SupeSite的前景可能会比这两个国内CMS更好。

好了,下面开始说迁移步骤,以Wordpress 2.7迁移至Supesite 7.0(UTF-8)为例,注:写详细内容太麻烦,只写实现方法,请朋友们自己实现,如确实有困难可联系本人指导。

分析:依靠Wordpress(以下简称WP)和Supesite(以下简称SS)自己的程序逻辑,其实需要迁移的数据无非就是文章(资讯)、文章附件(图片等)、文章评论、注册用户资料、主题模板,最后注意URL链接,尽量让搜索引擎已收录的链接能成功跳转到新系统上,不被搜索引擎降分。

在文章资讯和文章附件少的时候,完全可以手动从WP复制粘贴文章到SS中,一篇一篇文章重新添加。

一、确保原SupeSite站点可访问。

例如本站在5月31日之前http://www.是wordpress系统,所以原wordpress站点是http://www.

如果本机localhost调试,也建议以基于多域名的虚拟主机方式来配置站点,这样后期修改量更小。

二、搭建新的UCenter(简称UC)和临时SupeSite平台。

注意是UCenter,不是UCenterHome。UCenter为康盛产品平台的用户中心,UCenter为SNS交友产品,UCenter必需,UCenterHome非必须。例如本站UC为http://uc.,临时SS为http://temp.。SupeSite安装方法请参考其官方网站http://www./thread-1239276-1-1.html

三、用SS采集器采集原WP文章。

使用SS采集器自己添加规则按分类多次采集http://www.上的文章到临时SS站点http://temp.对应的分类中。

四、自写PHP程序修改SS文章ID、发布时间与WP上对应文章的一致。

因SS采集器采集到的文章ID为自动增1,发布时间为当前时间,无法保持与WP系统下的对应文章ID和发布时间一致。所以此时应自写PHP程序,思路为:

1、首先让SS数据库中supe_spaceitems、supe_spacenews和supe_attachments表的itemid、nid每个增加10000。目的是修改SS文章ID时不会出现ID冲突的情况。

2、每次传递一个ID给自写程序,该程序利用此ID到WP的数据库wp_posts表(WP文章表)中查询post_ID主键,得到post_title(文章标题,赋值给$title变量),得到post_date(文章发布时间赋值给$postdate)。参考SQL语句

1.select `post_title`, `post_date` from `wp_posts` where `post_ID` = '{$id}';

 

3、根据刚刚得到的$title,到SS的数据库中的supe_spaceitems表(SS文章列表)中查询subject为$title的,得到itemid(赋值给$ssoldid)。参考SQL语句

1.select `itemid` from `supe_spaceitems` where `subject` LIKE '%{$title}%' LIMIT 0,1;

 

4、因为WP数据库记录发布时间为标准日期型,而SS数据库记录UNIX时间戳型,如下图所示,所以再导入时间时应用PHP程序先行处理,PHP语句

1.date_default_timezone_set("Asia/Shanghai");
2.$postdate=strtotime($postdate);
本句就把标准日期型的值变成UNIX时间戳格式并赋值给变量自身。根据刚刚得到的$ssoldid,到SS的数据库中的supe_spaceitems表(SS文章列表)中查询itemid为$ssoldid的,并改写itemid为$id,dateline改写为$postdate。参考SQL语句
1.update `supe_spaceitems` set `itemid`='{$id}' , `dateline`='{$postdate}' where `itemid`='{$ssoldid}' ;

 

5、根据刚刚得到的$ssoldid,到SS的数据库中的supe_spacenews表(SS文章内容表)中查询itemid为$ssoldid的,改写itemid和nid均为$id。参考SQL语句

1.update `supe_spacenews` set `itemid`='{$id}' , `nid`='{$id}' where `itemid`='{$ssoldid}';

 

6、到SS的数据库中的supe_attachments表(SS文章附件表)中查询itemid为$ssoldid的,并改写itemid为$id。参考SQL语句

1.update `supe_spaceitems` set `itemid`='{$id}' where `itemid`='{$ssoldid}';

 

7、设$id循环增1,到你原来的WP系统数据库文章ID最大值的那个结束

8、复查文章,看看有无错误。

9、设置supe_spaceitems、supe_spacenews和supe_attachments表的itemid或nid的自增字段为你目前最大itemid+1,否则用SS系统后写一篇文章,其ID将为10001。

五、评论导入。

将WP的post_comments表导出为Microsoft Excel CSV格式,使用Excel编辑添加删除列等,使其存放格式与supe_spacecomments表一致。如图:

将修改后的Excel表格另存为unicode的csv格式,然后FTP传至服务器上,使用此文http://www./viewnews-100.html提供的方法将csv文件导入SS数据库的supe_spacecomments表中。记得检查导入的数据是否正确

六、用户导入

WP和UC的密码加密算法不同,不能直接复制密文的方式导入,所以目前没有很好的办法保留原有用户密码导入,只能在UC中创建新用户,用户名与邮件设置为和原WP中的注册用户一致,再到SS登录中使用忘记密码功能给每个用户发送一封忘记密码的邮件,让该用户自己重设密码。

八、主题包修改

如果打算设计不变,而把WP的主题包修改成SS系统可用的,应具备比较丰富的xHMTL、CSS以及PHP知识,将原WP主题下载,保持主题包内部文件的原有相对路径。参考SS的default主题结构,将原来的index.php修改成index.html.php,header.php修改成header.html.php等,以SS模板文件的形式存在。

01.在每个.html.php文件头部加入
02.  
03.修改php get_header(); ?>为<!--{template header}-->修改为
04.  
05.修改和为$_SCONFIG[sitename]
06.  
07.修改为{S_URL}/templates/$_SCONFIG[template]/style.css
08.  
09.删除pingback
10.  
11.修改为$_SCONFIG[seohead]
12.  
13.修改为{S_URL}/templates/$_SCONFIG[template]
14.  
15.修改和及为{S_URL}
16.  
17.修改为<!--{loop $channels['menus'] $key $value}--><LI><A href="$value%5Burl%5D">$value[name]</A></LI><!--{/loop}-->修改为<!--{block name="category" parameter=
18."type/news/isroot/1/order/c.displayorder/limit/0,12/cachetime/
19.80800/cachename/category"
20.}--><!--{loop $_SBLOCK['category'] $value}--><LI><A href="$value%5Burl%5D">$value[name]</A></LI><!--{/loop}-->修改为<!--{template footer}-->修改为<!--{block name="spacenews" parameter=
21."catid/$thecat[subcatid]/order/
22.i.dateline DESC/perpage/10/cachename/allnews/tpl/data"}--><!--获取当前分类所有文章并分页显示--><!--{if $_SBLOCK['allnews']}--><!--{loop $_SBLOCK['allnews'] $value}-->修改为<!--{/loop}-->修改为$value[subject]
23.  
24.修改为#date("Y年m月d日", $value["dateline"])#
25.  
26.修改为$value[url]

等等,总之参考default主题修改

九、开启Rewrite并添加自定义Rewrite规则。

01.rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2 last;
02.rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2 last;
03.rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2 last;
04.rewrite ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2 last;
05.rewrite ^/([0-9]+)$ /index.php?uid/$1 last;
06.rewrite ^/action(.+)$ /index.php?action$1 last;
07.rewrite ^/category(.+)$ /index.php?action/category/catid$1 last;
08.rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1 last;
09.rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid$1 last;
10.rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid$1 last;

这导致原WP网址结构为http://www./html/2009/300.html,因为SS不能自定义URL地址,所以SS的文章URL为http://temp./viewnews-300.html,我们需要用Nginx做个跳转,在原有SS默认Nginx Rewrite规则上增加以下规则:

01.rewrite ^/album http://picasaweb.google.com/littlehz  permanent;
02.rewrite ^/about /action-channel-name-about.html  permanent;
03.rewrite ^/pollsarchive /action-poll-pollid-1.html  permanent;
04.rewrite ^/todo /action-channel-name-about.html  permanent;
05.rewrite ^/downloads /m.php?name=downloads  permanent;
06.rewrite ^/sitemap /action-site-type-map.html  permanent;
07.rewrite ^/tag/(.+)$ /action-tag-tagname-$1.html  permanent;
08.rewrite ^/category/technology /category-1.html  permanent;
09.rewrite ^/category/tune /category-2.html  permanent;
10.rewrite ^/category/tattle /category-3.html  permanent;
11.rewrite ^/category/share /category-4.html  permanent;
12.rewrite ^/html/([0-9]+)/([0-9]+).html /viewnews-$2.html permanent;

这样保证了虽然URL更改了,但不会丢失链接,出现404错误找不到该页。请根据原WP自定义URL结构并参考本规则自写规则,每个网站的结构都不同,Apache的Rewrite规则也与此不同,但类似。

十、替换修改临时SS系统URL为原WP的URL

临时SS系统URL为http://temp.,先SS欲替代原系统,必然要把SS的URL修改为http://www.,可以使用官方的SS URL替换工具http://faq./viewnews-196,或者手动修改UC中SS应用URL,修改SS配置文件,再手动进入数据库中使用类似

1.update `supe_spacenews` set `message`=replace(`message`, 'temp.', 'www.' );这样的SQL语句进行替换。

 

十一、修改DNS解析A记录到新服务器IP

原www.的A记录为67.220.69.79,现更改www.的A记录到64.71.167.26。等待DNS缓存更新,网站迁移完成。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多