📄 upgrade5.php
字号:
ADD UNIQUE (username),
ADD INDEX (email)
\$str_fields;
EOT;
$upgrade8 = <<<EOT
UPDATE cdb_members SET showemail='-1', timeoffset='9999', timeformat='0', dateformat='', pmsound='1';
ALTER TABLE cdb_memberfields CHANGE oicq qq varchar(12) NOT NULL;
ALTER TABLE cdb_forums DROP moderator,
DROP password,
DROP icon,
DROP viewperm,
DROP postperm,
DROP replyperm,
DROP getattachperm,
ADD inheritedmod tinyint(1) NOT NULL AFTER allowimgcode,
ADD autoclose smallint(6) NOT NULL AFTER replycredits,
ADD modnewposts tinyint(1) NOT NULL AFTER allowimgcode,
ADD recyclebin tinyint(1) NOT NULL AFTER allowimgcode,
ADD allowblog TINYINT(1) NOT NULL AFTER allowimgcode;
DELETE FROM cdb_attachments WHERE pid='0' OR aid='0' OR tid='0';
UPDATE cdb_forums SET allowblog='1';
DELETE FROM cdb_posts WHERE dateline=0;
DELETE FROM cdb_threads WHERE dateline=0;
EOT;
if(!$action) {
echo"本程序用于升级 Discuz! 3.1.2 到 Discuz! 4.0.0,请确认之前已经顺利安装 Discuz! 3.1.2<br><br><br>";
echo"<b><font color=\"red\">本升级程序只能从 3.1.2 升级到 4.0.0,运行之前,请确认已经上传 3.1.2 的全部文件和目录</font></b><br>";
echo"<b><font color=\"red\">升级前请打开浏览器 JavaScript 支持,整个过程是自动完成的,不需人工点击和干预.<br>升级之前务必备份数据库资料,否则可能产生无法恢复的后果!<br></font></b><br><br>";
echo"正确的升级方法为:<br>1. 关闭原有论坛,上传 Discuz! 4.0.0 版的全部文件和目录,覆盖服务器上的 3.1.2<br>2. 上传本程序到 Discuz! 目录中;<br>4. 运行本程序,直到出现升级完成的提示;<br><br>";
echo"<a href=\"$PHP_SELF?action=upgrade&step=1\">如果您已确认完成上面的步骤,请点这里升级</a>";
} else {
$db = new dbstuff;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
$db->select_db($dbname);
unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
if($step == 1) {
$query = $db->query("SELECT value FROM {$tablepre}settings WHERE variable='version'");
if(!in_array(($db->result($query, 0)), array('3.1', '3.1.2'))) {
exit('您当前数据库数据版本不是3.1或3.1.2,无法升级'); //debug
}
$query = $db->query("SELECT username, count(*) AS count FROM {$tablepre}members GROUP BY username HAVING count>1");
while($member = $db->fetch_array($query)) {
$uids = 0;
$member['count']--;
$member['username'] = addslashes($member['username']);
$querymem = $db->query("SELECT uid FROM {$tablepre}members WHERE username='$member[username]' ORDER BY adminid>0, postnum, credit LIMIT $member[count]");
while($mem = $db->fetch_array($querymem)) {
$uids .= ",$mem[uid]";
}
$db->query("DELETE FROM {$tablepre}members WHERE uid IN ($uids)");
}
runquery($upgrade1);
echo "第 1 步升级成功<br><br>";
redirect("?action=upgrade&step=2");
} elseif($step == 2 || $step == 3) {
$fieldids = array();
$str_table = '';
$query = $db->query("SELECT fieldid, size FROM {$tablepre}profilefields");
while($field = $db->fetch_array($query)) {
$str_table .= "\nfield_$field[fieldid] varchar($field[size]) NOT NULL default '',";
$fieldids[] = $field['fieldid'];
}
if($step == 2) {
eval("\$upgrade2 = \"$upgrade2\";");
runquery($upgrade2);
echo "第 2 步升级成功<br><br>";
redirect("?action=upgrade&step=3&start=0");
} else {
$start = intval($start);
$fields = 'uid, site, icq, oicq, yahoo, msn, location, bio, signature, avatar, avatarwidth, avatarheight, customstatus, ignorepm';
$fields .= $fieldids ? ', field_'.implode(', field_', $fieldids) : '';
$query = $db->query("SELECT $fields FROM {$tablepre}members LIMIT $start, 3000");
while($member = $db->fetch_array($query)) {
$member = daddslashes($member);
$fieldadd = '';
foreach($fieldids as $fieldid) {
$fieldadd .= ", '".$member['field_'.$fieldid]."'";
}
$db->query("INSERT INTO {$tablepre}memberfields ($fields, sightml)
VALUES('$member[uid]', '$member[site]', '$member[icq]', '$member[oicq]', '$member[yahoo]', '$member[msn]', '$member[location]', '$member[bio]', '$member[signature]', '$member[avatar]', '$member[avatarwidth]', '$member[avatarheight]', '$member[customstatus]', '$member[ignorepm]' $fieldadd, '$member[signature]')");
}
if($db->num_rows($query)) {
echo "正在进行第 3 步升级 起始列数: $start<br><br>";
redirect("?action=upgrade&step=3&start=".($start+3000));
} else {
echo "第 3 步升级成功<br><br>";
redirect("?action=upgrade&step=4");
}
}
} elseif($step == 4) {
runquery(intval(mysql_get_server_info()) == 3 ? $upgrade4_3 : $upgrade4_4);
echo "第 4 步升级成功<br><br>";
redirect("?action=upgrade&step=5");
} elseif($step == 5) {
runquery(intval(mysql_get_server_info()) == 3 ? $upgrade5_3 : $upgrade5_4);
loginit('ratelog');
loginit('illegallog');
loginit('modslog');
loginit('cplog');
loginit('errorlog');
loginit('banlog');
echo "第 5 步升级成功<br><br>";
redirect("?action=upgrade&step=6");
} elseif($step == 6) {
runquery(intval(mysql_get_server_info()) == 3 ? $upgrade6_3 : $upgrade6_4);
echo "第 6 步升级成功<br><br>";
redirect("?action=upgrade&step=7");
} elseif($step == 7) {
$str_fields = '';
$query = $db->query("SELECT fieldid, size FROM {$tablepre}profilefields");
while($field = $db->fetch_array($query)) {
$str_fields .= ", DROP field_$field[fieldid]";
}
$query = $db->query("SELECT * FROM {$tablepre}forums");
while($forum = $db->fetch_array($query)) {
$forum['moderator'] = addslashes(str_replace(' ', '', $forum['moderator']));
$query1 = $db->query("SELECT uid FROM {$tablepre}members WHERE username IN ('".str_replace(',', '\',\'', $forum['moderator'])."')");
while($member = $db->fetch_array($query1)) {
$db->query("REPLACE INTO {$tablepre}moderators (fid, uid) VALUES
('$forum[fid]', '$member[uid]')");
}
$db->query("REPLACE INTO {$tablepre}forumfields (fid, icon, moderators, password, viewperm, postperm, replyperm, getattachperm)
VALUES ('$forum[fid]', '".addslashes($forum['icon'])."', '".str_replace(',', "\t", addslashes($forum['moderator']))."', '".addslashes($forum['password'])."', '$forum[viewperm]', '$forum[postperm]', '$forum[replyperm]', '$forum[getattachperm]')");
}
eval("\$upgrade7 = \"$upgrade7\";");
runquery($upgrade7);
$query = $db->query("SELECT s.styleid, sv.substitute FROM {$tablepre}styles s
LEFT JOIN {$tablepre}stylevars sv ON s.styleid=sv.styleid AND sv.variable='fontsize'");
while($style = $db->fetch_array($query)) {
$db->query("INSERT INTO {$tablepre}stylevars (styleid, variable, substitute)
VALUES ('$style[styleid]', 'innerborderwidth', '1')");
$db->query("INSERT INTO {$tablepre}stylevars (styleid, variable, substitute)
VALUES ('$style[styleid]', 'innerbordercolor', '#D6E0EF')");
$db->query("INSERT INTO {$tablepre}stylevars (styleid, variable, substitute)
VALUES ('$style[styleid]', 'msgfontsize', '$style[substitute]')");
}
echo "第 7 步升级成功<br><br>";
redirect("?action=upgrade&step=8");
} elseif($step == 8) {
runquery($upgrade8);
$q = $db->query("SELECT fid FROM {$tablepre}forums");
while($f = $db->fetch_array($q)) {
$fid = $f['fid'];
$query = $db->query("SELECT COUNT(*) AS threadcount, SUM(t.replies)+COUNT(*) AS replycount
FROM {$tablepre}threads t, {$tablepre}forums f
WHERE f.fid='$fid' AND t.fid=f.fid AND t.displayorder>='0'");
extract($db->fetch_array($query));
$query = $db->query("SELECT tid, subject, lastpost, lastposter FROM {$tablepre}threads
WHERE fid='$fid' AND displayorder>='0' ORDER BY lastpost DESC LIMIT 1");
$thread = $db->fetch_array($query);
$thread['subject'] = addslashes($thread['subject']);
$thread['lastposter'] = addslashes($thread['lastposter']);
$db->query("UPDATE {$tablepre}forums SET posts='$replycount', threads='$threadcount', lastpost='$thread[tid]\t$thread[subject]\t$thread[lastpost]\t$thread[lastposter]' WHERE fid='$fid'", 'UNBUFFERED');
}
dir_clear('./forumdata/cache');
dir_clear('./forumdata/templates');
echo "恭喜您升级成功,请务必删除本程序. 进行以下操作后才能最后完成:<br> 更新缓存";
}
}
function dir_clear($dir) {
$directory = dir($dir);
while($entry = $directory->read()) {
$filename = $dir.'/'.$entry;
if(is_file($filename)) {
@unlink($filename);
}
}
$directory->close();
}
function daddslashes($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = daddslashes($val, $force);
}
} else {
$string = addslashes($string);
}
return $string;
}
function loginit($log) {
global $lang;
$fp = @fopen('./forumdata/'.$log.'.php');
@fwrite($fp, "<?PHP exit(\"Access Denied\"); ?>\n");
@fclose($fp);
}
function checkbbcodes($message, $bbcodeoff) {
return !$bbcodeoff && !preg_match("/\[.+\].*\[\/.+\]/s", $message) ? -1 : $bbcodeoff;
}
function checksmilies($message, $smileyoff) {
global $smilies;
return !$smileyoff && !preg_match('/'.implode('|', $smilies).'/', $message) ? -1 : $smileyoff;
}
function runquery($query) {
global $db, $tablepre;
$expquery = explode(";", $query);
foreach($expquery as $sql) {
$sql = trim($sql);
if($sql != "" && $sql[0] != "#") {
$db->query(str_replace("cdb_", $tablepre, $sql));
}
}
}
function redirect($url) {
echo"<script>";
echo"function redirect() {window.location.replace('$url');}\n";
echo"setTimeout('redirect();', 500);\n";
echo"</script>";
echo"<br><br><a href=\"$url\">浏览器会自动跳转页面,无需人工干预。<br>除非当您的浏览器没有自动跳转时,请点击这里</a>";
}
function random($length) {
$hash = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -