Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
$win->mainTitle = "系统修复工具";
$wecome_info = "系统主页 > 系统错误修复工具";
$win->AddTitle('本工具用于检测和修复您的系统可能存在的错误');
$msg = "
由于手动升级时用户没运行指定的SQL语句,或自动升级的遗漏处理或处理出错,可能会导致一些错误,使用本工具会自动检测并处理
本工具目前主要执行下面动作:
1、修复/优化数据表;
2、更新系统缓存;
3、检测系统变量一致性
4、检测微表与主表数据一致性
常规检测
|
";
$win->AddMsgItem("$msg
");
$winform = $win->GetWindow('hand', '');
$win->Display();
exit();
}
/*-------------------
数据结构常规检测
function 1_test_db() { }
--------------------*/
else if ($dopost == 1) {
$win = new OxWindow();
$win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
$win->mainTitle = "系统修复工具";
$wecome_info = "系统错误修复工具 > 检测数据结构";
$win->AddTitle('本工具用于检测和修复您的系统可能存在的错误');
$msg = "
已完成数据结构完整性检测
如果您系统有下面几种问题之一,请检测微表正确性:
1、无法获得主键,因此无法进行后续操作
2、更新数据库archives表时出错
3、列表显示数据目与实际文档数不一致
检测数据
|
";
$win->AddMsgItem("$msg
");
$winform = $win->GetWindow('hand', '');
$win->Display();
exit();
}
/*-------------------
检测微表正确性并尝试修复
function 2_test_arctiny() { }
--------------------*/
else if ($dopost == 2) {
$msg = '';
$allarcnum = 0;
$row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__archives` ");
$allarcnum = $arcnum = $row['dd'];
$msg .= "#@__archives 表总记录数:{$arcnum}
";
$shtables = array();
$dsql->Execute('me', " SELECT addtable FROM `#@__channeltype` WHERE id < -1 ");
while ($row = $dsql->GetArray('me')) {
$addtable = strtolower(trim(str_replace('#@__', $cfg_dbprefix, $row['addtable'])));
if (empty($addtable)) {
continue;
} else {
if (!isset($shtables[$addtable])) {
$shtables[$addtable] = 1;
$row = $dsql->GetOne("SELECT COUNT(aid) AS dd FROM `$addtable` ");
$msg .= "{$addtable} 表总记录数:{$row['dd']}
";
$allarcnum += $row['dd'];
}
}
}
$msg .= "总有效记录数:{$allarcnum}
";
$errall = "完成修正";
$row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctiny` ");
$msg .= "微统计表记录数:{$row['dd']}
";
if ($row['dd'] == $allarcnum) {
$msg .= "两者记录一致,无需修正
";
} else {
$sql = "TRUNCATE TABLE `#@__arctiny`";
$dsql->ExecuteNoneQuery($sql);
$msg .= "两者记录不一致,尝试进行简单修正
";
//导入普通模型微数据
$sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
SELECT id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid FROM `#@__archives` ";
$dsql->ExecuteNoneQuery($sql);
//导入单表模型微数据
foreach ($shtables as $tb => $v) {
$sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
SELECT aid, typeid, 0, arcrank, channel, senddate, 0, mid FROM `$tb` ";
$rs = $dsql->ExecuteNoneQuery($sql);
$doarray[$tb] = 1;
}
$row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctiny` ");
if ($row['dd'] == $allarcnum) {
$msg .= "修正记录成功
";
} else {
$msg .= "修正记录失败,建议进行高级综合检测
";
$errall = "结合性检测 ";
}
}
UpDateCatCache();
$win = new OxWindow();
$win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
$win->mainTitle = "系统修复工具";
$wecome_info = "系统错误修复工具 > 检测微表正确性";
$win->AddTitle('本工具用于检测和修复您的系统可能存在的错误');
$msg = "
";
$win->AddMsgItem("$msg
");
$winform = $win->GetWindow('hand', '');
$win->Display();
exit();
}
/*-------------------
高级方式修复微表(会删除不合法主键的内容)
function 3_re_arctiny() { }
--------------------*/
else if ($dopost == 3) {
$errnum = 0;
$sql = " TRUNCATE TABLE `#@__arctiny`";
$dsql->ExecuteNoneQuery($sql);
$sql = "SELECT arc.id, arc.typeid, arc.typeid2, arc.arcrank, arc.channel, arc.senddate, arc.sortrank, arc.mid, ch.addtable FROM `#@__archives` arc LEFT JOIN `#@__channeltype` ch ON ch.id=arc.channel ";
$dsql->Execute('me', $sql);
while ($row = $dsql->GetArray('me')) {
$sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
VALUES('{$row['id']}','{$row['typeid']}','{$row['typeid2']}','{$row['arcrank']}', '{$row['channel']}','{$row['senddate']}','{$row['sortrank']}','{$row['mid']}'); ";
$rs = $dsql->ExecuteNoneQuery($sql);
if (!$rs) {
$addtable = trim($addtable);
$errnum++;
$dsql->ExecuteNoneQuery("DELETE FROM `#@__archives` WHERE id='{$row['id']}' ");
if (!empty($addtable)) $dsql->ExecuteNoneQuery("DELETE FROM `$addtable` WHERE id='{$row['id']}' ");
}
}
//导入单表模型微数据
$dsql->SetQuery("SELECT id,addtable FROM `#@__channeltype` WHERE id < -1 ");
$dsql->Execute();
$doarray = array();
while ($row = $dsql->GetArray()) {
$tb = str_replace('#@__', $cfg_dbprefix, $row['addtable']);
if (empty($tb) || isset($doarray[$tb])) {
continue;
} else {
$sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
SELECT aid, typeid, 0, arcrank, channel, senddate, 0, mid FROM `$tb` ";
$rs = $dsql->ExecuteNoneQuery($sql);
$doarray[$tb] = 1;
}
}
$win = new OxWindow();
$win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data'");
$win->mainTitle = "系统修复工具";
$wecome_info = "系统错误修复工具 > 高级综合检测修复";
$win->AddTitle('本工具用于检测和修复您的系统可能存在的错误');
$msg = "
完成所有修复操作,移除错误记录 {$errnum} 条
完成修正
|
";
$win->AddMsgItem("$msg
");
$winform = $win->GetWindow('hand', '');
$win->Display();
exit();
}