首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP+MYSQL编程 » ASP论坛转discuz!PHP论坛研究一  


  作者:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

  nqp@nqp.me
  4304410
  www.nqp.me

 

 发表:2005-07-11 19:48:19 阅读 2234 次 回复 1 次 得分1  |   字号 字色
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;
 }
    }

?>

(未完待续)
 
 1#楼  
 
  回复人:cykk
  注册时间:2004-12-30
  主题/回复:41/99
  积分:688
  等级:★★★(六级)
  称号:声名鹊起

   
 1#楼 发表于2005-07-12 06:45:40  评分:1 

   我现在看是看得懂,但不会写!看完之后又忘记了怎么办?
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.004sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版