发新话题
打印

[其他] 完美动易2006 Sp6 SW6.5 Access MSSQL转 PHPCMS 2007 SP6 程序2008-5-3

完美动易2006 Sp6 SW6.5 Access MSSQL转 PHPCMS 2007 SP6 程序2008-5-3

完美动易2006 Sp6  SiteWeaver CMS6.5 Access MSSQL转 PHPCMS 2007 SP6程序  Bulid 2008-5-28 {  P, k9 m  K# S( c

, R; y  q0 ~- F2 O( C$ y/ z
(由于本人的爱好,做了几个小网站,现在需要将其转到PHPCMS中,但是官方的程序均不可用,于是自己经过20多天的摸索,改出一个完美版的转换程序。本着开源的精神,现将自已修改的这个程序共享出来,由于本人第一次改PHP的程序,以前没有接触过,内有BUG或测试不到之处,还望各位网友指正,大家共同探讨,一起进步)
+ r* B% Z6 D4 N2 X4 b: \2 ]8 A; m/*. e, M* A5 M# [' T* M1 v
=========================================================" D: j* I; q* Z2 v
动易内容管理Access MSSQL版 >> 到PHPCMS 2007 数据转换程序  0.8426 Bulid 2008-5-2 % _  g9 l3 v5 @# D9 @$ o
www.phpcms.cn 原版发布% B0 s) a" P* P& J: T& d' C. U) j
gsweiyu 修改9 k  `+ N4 J: ^5 W& i; ?
联系方式:han#minqin.cn  我的网站:
http://www.minqin.cn
(拯救民勤网), d0 [1 c2 a, {0 M
=========================================================- x3 m: O/ h* z* j) y
*/
3 C8 E, J* s8 h/ a

/ Q2 E; C4 s) l; J
声明 :  5 `9 V* ?- |- \4 U9 w

5 \$ N! P* h  t6 U
  • 本程序为在官方免费程序上修改,相应版权归原开发者所有,修改部分归本人所有。
  • 本程序的使用者应当有一定的PHP.MYSQL.MSSQL使用基础,否则请先行了解相关知识。
  • 本程序操作不会破坏原有动易数据,本人对使用本程序所产生的损失不承担任何责任。
  • 本程序不保证数据100%的导入成功,有问题请咨询官方或联系本人:han@minqin.cn。
本程序适用转换版本 :  / Q2 E* \9 A. l4 h
  • PowerEasy @2006 Sp6 Access MSSQL
  • SiteWeaver CMS6.5 Access MSSQL
  • 转换  -> PHPCMS @2007 Sp6  ( 均为最新版本测试通过 )
本程序在以下环境中测试通过 :  
; E% X* J, J0 ]4 ]/ W+ q
  • WINDOWS 下 PHP4/5 以及 PHPCMS 2007 支持版本的MYSQL
  • 如需要转换MSSQL版本还需在本机上安装MSSQL 2000/2005
      本人试验的环境说明:
& r) S: I; Y# O6 B      Windows XP 专业版 Sp2 PC_webserver官方下载,MS SQLSERVER 2000 Sp5
/ v% Y' U& Q5 _. _6 I      PowerEasy @2006 Sp6 Access版 有多个文章频道,一个图片频道,一个下载频道,计有数据3400余条,后升级到MSSQL,均测试通过
3 s6 O; A% B2 N9 g* v. W" g# X1 i4 i: m$ G8 r( K( e5 o
      Windows 2003 企业版 Sp2  IIS 6,PHP 5.25,Mysql 5.0.45-community-nt,MS SQLSERVER 2005 Sp2
- v( z! a( V* s      PHP 工作在IIS 6 FASTCGI 模式下(关于FASTCGI,与ISAPI并无不同,但效率要高得多)1 F$ y$ z  \1 l2 r' ?, N5 t
      SiteWeaver CMS6.5 SQL版 有多个文章频道,无图片与下载频道,计有数据20余条,导出到ACCESS,均测试通过5 _2 ^: F/ k2 c+ k) i
      (经测试,PHPCMS Sp4 Sp5 动易2006 Sp4以上均可使用本程序)
9 [; {$ `/ S; b' F: T: B
5 Q% U9 l0 V1 `. x  T( D. {3 l; j) ]/ g
本程序可以转换的数据 :  ) W9 T* m! s/ x/ i' ?1 h
" Z( n+ ?7 `1 |! F9 q
  • 用户列表;
  • 所有文章频道类型(包括专题)数据;
  • 所有下载频道类型(包括专题)数据;
  • 所有图片频道类型(包括专题)数据;
  • 友情链接数据;
  • 公告数据;
本程序不能或无法完整转换的数据及注意要点 :  
+ L2 i9 |$ x& {! d! ^
  • 重复的用户登陆号将忽略;
  • 安装完毕后,请更新缓存,并对各个频道、栏目更新缓存;
  • PHPCMS 2007中的原有数据将完全删除;
  • 仅对文章、图片和下载三种类型的频道进行导入,其它则频道不进行导入;
  • 本版本能自动添加自定义核心类型频道,请确认您的phpcms目录有权限写,以便程序操作;
  • 转入后的内容相关图片链接地址,请自行复制到相应的目录中,即可显示。
使用说明:
' a9 h- V( {$ k* i+ a    1、只需要修改config.php一个文件,其他的文件不需要改动,修改中多注意提示
8 N/ d5 F5 g1 m' D: J2 }    2、如需转换MSSQL版本,必须解决PHP无法读取MSSQL的NTEXT类型数据的问题
' ?' w6 [) z* R* U3 O! K, S% O
         MS SQL message: ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16)
% P  Z  h7 b1 i4 F+ ^; m. {
         经过N次实验,终于找到了一种变通的方法完美解决PHP下读MsSQL个NTEXT的方法
: m- K1 X9 r4 ^" ^         思路是用一个存储过程读出MsSQL的表域名,然后将这个表域名替换select * form [表名] where [条件]: j0 \( ^# ?) @, B! d
         这样的*[字段名|域名列表],具体参见相关程序8 k* W1 p# V+ T
       (这个解决思路也可以用在类似的程序中,轻松解决PHP与MSSQL的查询问题)
, d" X3 N7 `! s1 L' U
4 B  Z8 L# N0 V* k; _- a3 m         事先请先执行sp_columns.sql创建存储过程& n, N- a* |8 c- g' g- A
         需要远程登录MS SQL SERVER,在需要转换的数据库中新建一个存储过程
' p1 M( j; V- o* t7 A         将本程序目录下sp_columns.sql内的所有内容复制过去并执行,提示执行成功便可,如果执行失败,则是因为你修改了sp_columns.sql的内容,将原文复制过去再执行。
* k3 Z. @  C5 ^
7 k; I/ ?% O$ {, r# H    3、ESHOP版本中的文章数据也同样可以转换,因本人手中没有ESHOP版本的数据库,所以没有测试,有需要的朋友可以根据这个程序按例改写程序便可。
' F  i" g( R1 a6 q4 T4 q    4、原动易数据中(如文章中a)如果有“/”、“\”等符号可能导致转换失败,请先修复原动易数据。
. y& A% n7 h9 D) o0 S, T1 X2 R
         MySQL Error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '',author = 'admin',copyfrom = '经济日报',paginationtype = '0',maxcharperpage = '' at line 1 - a9 Y5 [; X! a2 m# X
         MySQL Errno:1064
) F% ^- a7 I: b9 W" S1 k; f  t         Message:MySQL Query Error

- h' Y; E1 D  P: ~
         这个错误是由于记录中有的域中有非法字符如:"/"、"\" ,或是找到对应的记录删除了就没错了
; J  s/ ^4 P4 d0 F& J
* q# M; M! [& [% ^
    5、如果服务器不方便,不能直接转MSSQL,需要导出到ACCESS,请注意以下几点
/ z# c$ F4 {  G' e4 t         准备一个空的PowerEasy2006.mdb,所谓空,是里面所有表的记录都删除空了,如果不这样做,在导出时就一定要在映射中选择删除表中所有记录。1 D; \/ I! M" D! i3 Y( I( h
         或是准备一个空的MDB数据库,导出时重新建表,这样操作更复杂一些,需要一定的专业知识
( o2 a- ~9 R8 G$ J         如果你在动易中建了其他的频道,PE_Admin 最后生增加几个新列,可以手工PowerEasy2006.mdb加上,也可以忽略。
- z5 D7 G6 q; }+ D1 T         错误 0xc0202009: {20121A51-ED90-4F25-A740-75F912CE40AD}: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80004005。
% j: y3 _( o- `( E# t" a) j         已获得 OLE DB 记录。源:“Microsoft JET Database Engine” Hresult: 0x80004005 说明:“未指定的错误”。4 W- v% \, \  ]+ z( n
0 @; s1 R% x1 Z1 G" ?4 x
         如果出现这样的错误,是一次执行的表太多了的缘故,可以一次导出1/3的表,分3次导完。/ u- M  Q2 J$ U; H! S3 d, S0 G
* e% V( Q9 ^! i- h
    6、如果转换错误,请在phpMyAdmin对应数据库中SQL处执行如下语句,便可重新进行转换。
" N1 }7 G# B! ^3 C: F前提是你安装时选用的是默认安装,用PHPCMS做为用户名. i# O3 V$ J9 w$ B6 |0 h
引用:
TRUNCATE `phpcms_announce`;
: l8 A% A7 W; |( TTRUNCATE `phpcms_category`;
2 L& r& @, D; o4 {. M# T+ C5 STRUNCATE `phpcms_link`;
$ X0 D% H  z) n* b" l+ dTRUNCATE `phpcms_special` ;
5 a7 e' f3 |& g9 z' MDELETE FROM `phpcms_channel` WHERE `phpcms_channel`.`channelid` >9;
+ o: J) _0 N: S5 W4 T2 WDELETE FROM `phpcms_member` WHERE `phpcms_member`.`userid` >1;+ |/ D$ i/ {& s/ O2 c7 t
DELETE FROM `phpcms_member_info` WHERE `phpcms_member_info`.`userid` >1;

' K% q; {" v7 ^3 v0 d* I6 F/ j 7、其他未尽事宜,还望各位同仁多加测试,如有错误,请说明错误原因,截图跟贴。+ e. Z" M( ~6 s0 \, B: z0 C9 N* y

* m8 {  i; B3 D2 V: X- }
& _* G5 t2 [4 d; o2 ~) E. B. o+ A使用步骤:

% \$ ~* E3 G8 Z4 G1、下载本程序
7 L, P" e0 f0 Y- h" M  ]2、假定已安装PHPCMS,并可以正常使用
7 a- o& ?6 n) I3、将本程序解压到PHPCMS根目录(正常解压为/pe2phpcms)' z5 Z7 N' n8 G
4、准备数据库,ACCESS要拷贝到网站用户有访问权利的目录下,本机转换任何路径均可
. u9 x1 {: [" o5 rMSSQL测试访问权限
, e! J% ~* @/ k/ q0 _- L5、修改CONFIG.PHP一般而言,只需要修改本程序中的配置3 c( y9 _; D! V) y/ U
6、开始转换8 |' |; H" T- T9 [2 K

- d- w8 }4 o; B) I. u9 o$ s+ K; T
3 c/ p. x) s& V9 h- X4 O本程序的主要修正:' D: C1 i& h/ ?( V
1、修正了旧版的转换程序只能转成PHPCMS Sp5而不能转到PHPCMS Sp6的错误;. R, h4 f2 o" j8 w
2、修正了旧版程序在数据量大时出现超时的问题;! ]% o6 B% }5 [% W" ~! _. P: }: E# F, }
3、增加了旧版程序中的提示与统计信息,可以更好的反映转换状况;
  T" R" Y# l3 j( {" }4、找到了一个PHP中有效读取MSSQL时NTEXT类型数据的思路,并以此解决了众多ASP+MSSQL网站程序向PHP移植的问题,尤其有数据量大的情况下,导出Access出错时,这种办法尤为重要
3 h# O& O9 u+ r8 [5、顺利实现了MSSQL版向PHPCMS的转移。
6 H, n3 p/ B& _3 ~6、针对于转换过程中遇到的种种问题,一方面修改了程序中的几处不严谨的地方,另一方面给出了解决办法。! |. H4 M. r) K
7、针对于动易开源的SiteWeaver CMS6.5,也实现了ACCESS与MSSQL两种版本的的顺利转移。$ @, C8 d  r" a
8、花费了大量的时间,在15万条数据的基础上,对于程序进行了细致的测试,确保有较少的BUG。, J" M# L; m# ^9 F+ o9 a: }

. F- V( a0 {5 j* p8 a
附件: 您所在的用户组无法下载或查看附件

想要访谈的站长请联系我Q:893819301

TOP

发新话题