BBSxp5.x转D4完整教程及官方转换程序的几个错误
花了一个晚上仔细研究了整个转换的过程,以及官方提供的bbsxp2d4.php,总算是把BBSxp 5.13 转成了D4,鉴于 所转换的几个表自BBSxp 5.0以来就没有大的改变,所以只要是原版的bbsxp或者是没有对主数据库中原有几个主要表中的项进行过修改的话,应该会问题不大。
强烈建议在本地进行调试,这样速度快,而且恢复起来很容易。IIS+PHP+Mysql+phpmyadmin 的环境搭建请参考这里
如果你已经安装了bbsxp sql版,请跳过前3步。
1.如果你安装的是access版,那么请先下载安装microsoft sql server 2000 个人版 ,注意企业版在xp下无法安装服务端组件的,对于mssql2000的安装这里就不再说了,可以在网上找到相关的资料。
2.安装完毕后,mdb数据库转换成mssql数据库请参考中 dvbbs部分,点击查看,这个步骤是完全一样的。
3.转换成后,请一定要在sql版的bbsxp中调试通过以后再继续。
4.如果在php.ini中没有打开相应的mssql支持,则编辑php.in,去掉iextension=php_mssql.dll前面的分号,并且把mssql设置部分中的textlimit和sizelimit均设为最大值
5.下载官方提供的bbsxp2d4.php后放到discuz的根目录下,并打开此文件进行设置,mssql和mysql服务器相关信息请按照实际情况填写,post表名一行只有当你曾经分过表时才需要填写,一般不需要。要注意的是$source_mtables一行已默认为n_user,请不要改变为user(虽然bbsxp中的表为user)
6.打开mssql企业管理器中bbsxp相应的数据库,请修改表user的名字为n_user ,同时把n_user,bbsconfig,forum,reforum四个表原来数据类型为ntext的列改为text类型。
7.下面是几个转换文件的问题,要注意:
第546行,是一个明显的语法错误,where后面的$oldtid是需要用单引号引起来的,而且还有一个问题,oldtid根本就是一个没有被定义过的变量,这个select的sql查询语句是找不到任何符合条件的纪录的,所以结果会导致所有回帖均无法导入,解决方法很简单,从前面的代码看来,_tid才是纪录当前帖子编号的,所以把$oldtid改成$_tid,总的来说546行应该为
$pquery=mssql_query("SELECT * FROM {$source_tablepre}reforum WHERE topicid='$_tid' ");
另外一个问题,是你会发现当转换结束后,所有帖子都显示为“游客“,原因出在505行
$authorid=$thread['postuserid'];
我想这个程序可能是从dvbbs2d4的程序转过来的,所以留下很多dvbbs的痕迹,这里的问题在于bbsxp中forum和reforum表中并不存在一个叫做postuserid的列,而只是记录下发贴者的用户名,所以解决的办法是,带着这个用户名去n_user表中寻找相应的userid了,修改方法如下:
删除原505行,并在原505行的位置插入以下代码:
$temp_username = $thread['username']; //取得用户名
$temp_query = mssql_query("SELECT * FROM {$source_mtables} WHERE username='$temp_username'"); //在用户表中查询该用户名
$temp_thread = mssql_fetch_assoc($temp_query);
$temp_thread = daddslashes(array_change_key_case($temp_thread));
$authorid = $temp_thread['id']; //取得用户id
这样下来整个转换应该没什么大问题了,所有的用户,帖子和回帖都是正常的,至少到现在我还没有发现什么问题
如果版主有时间,最好可以把数据转换那个文件再略微整理一下,里面很多代码其实都是针对dvbbs的吧,虽然留着也没什么问题,只是看到php提示一大堆的索引不存在,变量不存在……呵呵,使得真正的错误倒是不容易看出来了。 |