$gotojs"; if (empty($tablearr)) { $dsql->SetQuery("SHOW TABLES"); $dsql->Execute('t'); while ($row = $dsql->GetArray('t', MYSQL_BOTH)) { if (preg_match("#^{$cfg_dbprefix}#", $row[0]) || in_array($row[0], $channelTables)) { $dedeSysTables[] = $row[0]; } } $tablearr = implode(",", $dedeSysTables); } if (empty($bakfiles)) { $dh = dir($bkdir); $structfile = ""; while (($filename = $dh->read()) !== false) { if (!preg_match("#txt$#", $filename)) { continue; } if (preg_match("#tables_struct#", $filename)) { $structfile = $filename; } else if (filesize("$bkdir/$filename") > 0) { $filelists[] = $filename; } } $dh->close(); $bakfiles = implode(",", $filelists); } if (file_exists(TOV6LOCK)) { ShowMsgV6("

已经成功执行升级程序,无需重复执行。

如果您需要获取升级服务,可以联系官方协助升级。

", "javascript:;"); } if ($step == 0) { ShowMsgV6("

执行升级程序之前,您需要备份站点数据库及文件,如果已经完成备份,可以点击下面“开始升级到V6”进行升级!
升级文档 开始升级到V6

如果您需要获取升级服务,也可以联系官方协助升级。

", "javascript:;"); } // 对数据库进行编码转换 else if ($step == 1) { if ($cfg_soft_lang === "gb2312") { //初始化使用到的变量 $tables = explode(',', $tablearr); $isstruct = 1; if (!isset($startpos)) { $startpos = 0; } if (!isset($iszip)) { $iszip = 0; } if (empty($nowtable)) { $nowtable = ''; } if (empty($fsize)) { $fsize = 2048; } $fsizeb = $fsize * 1024; //第一页的操作 if ($nowtable == '') { $tmsg = ''; $dh = dir($bkdir); while ($filename = $dh->read()) { if (!preg_match("#txt$#", $filename)) { continue; } $filename = $bkdir . "/$filename"; if (!is_dir($filename)) { unlink($filename); } } $dh->close(); $tmsg .= "发现是GBK编码系统,需要进行数据库转码...
"; if ($isstruct == 1) { $bkfile = $bkdir . "/tables_struct_" . substr(md5(time() . mt_rand(1000, 5000) . $cfg_cookie_encode), 0, 16) . ".txt"; $mysql_version = $dsql->GetVersion(); $fp = fopen($bkfile, "w"); foreach ($tables as $t) { $ttt = str_replace($cfg_dbprefix, $cfg_dbprefix . "v6_", $t); fwrite($fp, "DROP TABLE IF EXISTS `$ttt`;\r\n\r\n"); $dsql->SetQuery("SHOW CREATE TABLE " . $dsql->dbName . "." . $t); $dsql->Execute('me'); $row = $dsql->GetArray('me', MYSQL_BOTH); //去除AUTO_INCREMENT $row[1] = preg_replace("#AUTO_INCREMENT=([0-9]{1,})[ \r\n\t]{1,}#i", "", $row[1]); $eng1 = "#ENGINE=MyISAM[ \r\n\t]{1,}DEFAULT[ \r\n\t]{1,}CHARSET=gbk#i"; $row[1] = preg_replace($eng1, "ENGINE=MyISAM CHARSET=utf8", $row[1]); $row[1] = str_replace("CREATE TABLE `" . $cfg_dbprefix, "CREATE TABLE `" . $cfg_dbprefix . "v6_", $row[1]); $tableStruct = $row[1]; $tableStruct = gb2utf8($tableStruct); fwrite($fp, '' . $tableStruct . ";\r\n\r\n"); } fclose($fp); $tmsg .= "转化数据表结构信息完成...
"; } $tmsg .= "正在进行数据转化的初始化工作,请稍后..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //执行分页备份 else { $j = 0; $fs = array(); $bakStr = ''; //分析表里的字段信息 $dsql->GetTableFields($nowtable); $tmpNowtable = str_replace($cfg_dbprefix, $cfg_dbprefix . "v6_", $nowtable); $intable = "INSERT INTO `$tmpNowtable` VALUES("; while ($r = $dsql->GetFieldObject()) { $fs[$j] = trim($r->name); $j++; } $fsd = $j - 1; //读取表的内容 $dsql->SetQuery("SELECT * FROM `$nowtable` "); $dsql->Execute(); $m = 0; $bakfilename = "$bkdir/{$nowtable}_{$startpos}_" . substr(md5(time() . mt_rand(1000, 5000) . $cfg_cookie_encode), 0, 16) . ".txt"; while ($row2 = $dsql->GetArray()) { if ($m < $startpos) { $m++; continue; } //检测数据是否达到规定大小 if (strlen($bakStr) > $fsizeb) { $fp = fopen($bakfilename, "w"); $bakStr = gb2utf8($bakStr); fwrite($fp, $bakStr); fclose($fp); $tmsg = "完成到{$m}条记录的转化,继续转化{$nowtable}..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //正常情况 $line = $intable; for ($j = 0; $j <= $fsd; $j++) { if ($j < $fsd) { $line .= "'" . RpLine(addslashes($row2[$fs[$j]])) . "',"; } else { $line .= "'" . RpLine(addslashes($row2[$fs[$j]])) . "');\r\n"; } } $m++; $bakStr .= $line; } //如果数据比卷设置值小 if ($bakStr != '') { $fp = fopen($bakfilename, "w"); $bakStr = gb2utf8($bakStr); fwrite($fp, $bakStr); fclose($fp); } for ($i = 0; $i < count($tables); $i++) { if ($tables[$i] == $nowtable) { if (isset($tables[$i + 1])) { $nowtable = $tables[$i + 1]; $startpos = 0; break; } else { ShowMsgV6('完成数据备份转码,下面进行还原……', 'index.php?step=2'); exit(); } } } $tmsg = "完成到{$m}条记录的转码,继续转码{$nowtable}..."; $doneForm = "
\r\n
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } //分页备份代码结束 } else { ShowMsgV6('当前系统就是UTF8程序,无需数据库编码转换,进行DedeCMSV6升级……', 'index.php?step=3'); exit(); } } // 还原为UTF8编码的文件 else if ($step == 2) { if ($cfg_soft_lang === "gb2312") { @list($dbhost, $dbport) = explode(':', $GLOBALS['cfg_dbhost']); !$dbport && $dbport = 3306; $conn = mysqli_init(); mysqli_real_connect($conn, $dbhost, $GLOBALS['cfg_dbuser'], $GLOBALS['cfg_dbpwd'], false, $dbport) or die("无法连接数据库"); mysqli_query($conn, "SET character_set_connection=utf8,character_set_results=utf8,character_set_client=binary"); mysqli_select_db($conn, $GLOBALS['cfg_dbname']); $bakfilesTmp = $bakfiles; $bakfiles = explode(',', $bakfiles); if (empty($structfile)) { $structfile = ""; } if (empty($delfile)) { $delfile = 1; } if (empty($startgo)) { $startgo = 0; } if ($startgo == 0 && $structfile != '') { $tbdata = ''; $fp = fopen("$bkdir/$structfile", 'r'); while (!feof($fp)) { $tbdata .= fgets($fp, 1024); } fclose($fp); $querys = explode(';', $tbdata); foreach ($querys as $q) { $rs = mysqli_query($conn, trim($q) . ';'); if (!$rs) { //$str = mysqli_error($conn); //var_dump($str); } //$str = mysqli_error($conn); //var_dump($str); //$dsql->ExecuteNoneQuery(trim($q).';'); } if ($delfile == 1) { @unlink("$bkdir/$structfile"); } $tmsg = "完成数据表编码,准备转化数据..."; $doneForm = "
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } else { $nowfile = $bakfiles[0]; $bakfilesTmp = preg_replace("#" . $nowfile . "[,]{0,1}#", "", $bakfilesTmp); $oknum = 0; if (filesize("$bkdir/$nowfile") > 0) { $fp = fopen("$bkdir/$nowfile", 'r'); while (!feof($fp)) { $line = trim(fgets($fp, 512 * 1024)); if ($line == "") continue; //$rs = $dsql->ExecuteNoneQuery($line); //var_dump($line); $rs = mysqli_query($conn, $line); if ($rs) $oknum++; } fclose($fp); } if ($delfile == 1) { @unlink("$bkdir/$nowfile"); } if ($bakfilesTmp == "") { ShowMsgV6('成功转化所有数据,下面进行DedeCMSV6升级……', 'index.php?step=3'); exit(); } $tmsg = "成功转化{$nowfile}的{$oknum}条记录

正在准备转化其它数据..."; $doneForm = "
\r\n{$dojs}\r\n"; PutInfo($tmsg, $doneForm); exit(); } } else { ShowMsgV6('当前系统就是UTF8程序,无需数据库编码转换,继续DedeCMSV6升级……', 'index.php?step=3'); exit(); } } // 执行DedeCMSV6增量SQL else if ($step == 3) { @list($dbhost, $dbport) = explode(':', $GLOBALS['cfg_dbhost']); !$dbport && $dbport = 3306; $conn = mysqli_init(); mysqli_real_connect($conn, $dbhost, $GLOBALS['cfg_dbuser'], $GLOBALS['cfg_dbpwd'], false, $dbport) or die("无法连接数据库"); mysqli_query($conn, "SET character_set_connection=utf8,character_set_results=utf8,character_set_client=binary"); mysqli_select_db($conn, $GLOBALS['cfg_dbname']); $querys = explode(';', $v6sql); foreach ($querys as $key => $q) { $prefix = "#@__"; $q = str_replace($prefix, $GLOBALS['cfg_dbprefix'] . "v6_", $q); $q = str_replace("TYPE=MyISAM", "ENGINE=MyISAM", $q); $rs = mysqli_query($conn, trim($q) . ';'); if (!$rs) { // $str = mysqli_error($conn); // var_dump($str); } } // 重写配置 ReWriteConfig($conn); // 数据库连接文件 $sqlconn = file_get_contents(dirname(__FILE__) . "/common.inc.txt"); $sqlconn = str_replace("~dbtype~", "mysql", $sqlconn); $sqlconn = str_replace("~dbhost~", $GLOBALS['cfg_dbhost'], $sqlconn); $sqlconn = str_replace("~dbname~", $GLOBALS['cfg_dbname'], $sqlconn); $sqlconn = str_replace("~dbuser~", $GLOBALS['cfg_dbuser'], $sqlconn); $sqlconn = str_replace("~dbpwd~", $GLOBALS['cfg_dbpwd'], $sqlconn); $sqlconn = str_replace("~dbprefix~", $GLOBALS['cfg_dbprefix'] . "v6_", $sqlconn); $sqlconn = str_replace("~dblang~", "utf8", $sqlconn); file_put_contents(DEDEDATA . "/common.inc.php", $sqlconn); file_put_contents(TOV6LOCK, "www.dedebiz.com"); // rename(dirname(__FILE__)."/index.php",dirname(__FILE__)."/index.php.bak"); ShowMsgV6('完成系统数据库转换升级,下载DedeCMSV6系统,解压后将./src目录下的文件选择性替换即可完成升级。
下载DedeCMSV6 ', 'javascript:;'); exit(); }