ASP论坛转discuz!PHP论坛研究一 |
----------------------------------------------------------
www.17php.com
一起PHP的话
前段时间帮一个朋友把一个极限论坛(ASP+access)的,转换成了DISCUZ!(php+mysql)的。费了不少的劲。现在把源代码公开出来,大家一起研究。
由于不同的ASP论坛数据库结构都不尽相同,因此这个代码的适用范围非常有限,仅限于极限论坛。把这个代码发出来,主要让让大家看看PHP连接ACCESS数据库的一些方法。转换程序的思路非常简单,就是用PHP连接ACCESS和MYSQL,把数据从ACCESS中查询出来,然后写入到MYSQL数据库中去。整个转换最困难的不是写数据查询、插入程序,而是分析两个数据库的结构。两个论坛数据库差距巨大,表的数目、表的字段、字段类型等,都不一样。有些内容非常棘手。
原来的论坛,帖子十四万条,回复30多万条,用户一万多人。这个程序在运行时需要把PHP脚本超时时间设置到6分钟以上,如果数据量更大,需要设置的更大。
整个转换程序共4个文件:
conv_user.php 转换所有用户信息
conv_catandfourm.php 转换板块、子板块
conv_title.php 转换所有帖子
conv_reply.php 转换所有回复
NOTE:
1、由于涉及到数据重新排列,数据一致性对齐等多项问题,因此上面四个文件的执行顺序必须严格按照上面的排列顺序进行。
2、转换之前需要首先设置数据源,将原论坛的数据库设置成数据源,数据源名字在本程序中为“bbs”。然后把discuz!论坛安装完毕,安装选项可以采用默认,比如表的默认前缀,默认为“cdb_”。
3、因为两个论坛用户密码的加密方式不同,所以转换后的论坛用户无法用密码直接登录。但是可以写一个插件来解决,要求用户用旧密码激活新密码。这个程序很容易写,不再赘述。
4、本转换程序仅实现了用户信息转换、板块及分类转换、主题转换和回复转换。其他两个论坛无法兼容的插件没有转换,因此转换是有损失的。
5、本程序以极限论坛为例,程序不具备通用性。只为大家一起研究、参考。
----------------------------------------------------------
第一个,用户信息转换程序
conv_user.php
<?php
//Written by www.17php.com
//welcome to bbs.17php.com
$myid=mysql_connect("localhost","root","1234");
mysql_select_db("discuz2",$myid);
$id=odbc_connect("bbs","","");
echo "->连接到mysql数据库成功!<br>";
if(!$id){
echo "<font color=red>->无法连接到ACCESS数据库</font><br>";
exit;
}else{
echo "->连接到ACCESS数据源成功!<br>";
if($result=odbc_exec($id,"select * from Forum_UserDB")){
echo "->准备转换用户信息表:<br><font color=red>转换时间取决于数据量大小,如时间较长请耐心等待</font><br>";
$i=0;
$k=0;
while(odbc_fetch_row($result)){
// odbc_result$result)
$sql="insert into cdb_members values('',";
$sql.="'".odbc_result($result,"Username")."',";
$sql.="'".md5(odbc_result($result,"password"))."',";
$sql.="'0',";
$sql.="'Member',";
$sql.="'".odbc_result($result,"Last_Ip")."',";
$sql.="'".strtotime(odbc_result($result,"Reg_Time"))."',";
$sql.="'".strtotime(odbc_result($result,"LastTime"))."',";
$sql.="'".(odbc_result($result,"F_Count")+odbc_result($result,"F_R_Count"))."',";
$sql.="'".odbc_result($result,"Exp")."',";
$sql.="'',";
$sql.="'".odbc_result($result,"Email")."',";
$sql.="'".odbc_result($result,"HomePage")."',";
$sql.="'',";
$sql.="'".odbc_result($result,"Oicq")."',";
$sql.="'',";
$sql.="'',";
$sql.="'".odbc_result($result,"From")."',";
$sql.="'".odbc_result($result,"birthday")."',";
$sql.="'',";
$sql.="'',";
$sql.="'".odbc_result($result,"Underwrite")."',";
$sql.="'',";
$sql.="'0',";
$sql.="'0',";
$sql.="'0',";
$sql.="'Y-n-j',";
$sql.="'h:i A',";
$sql.="'1',";
$sql.="'1',";
$sql.="'8',";
$sql.="'',";
$sql.="'0',";
$sql.="'',";
$sql.="'0'";
$sql.=")";
mysql_query($sql,$myid);
if(($i%500)==0){
$k=$k+1;
echo "<br>>>完成:500×".$k.":";
}
echo ".";
$i=$i+1;
}
echo "<br>共转换数据:".$i."条。";
}else{
echo "->access数据库查询失败!";
exit;
}
}
?>
(未完待续) |
|
|