国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

241 行
9.8KB

  1. <?php
  2. /**
  3. * 系统修复工具
  4. *
  5. * @version $Id: sys_repair.php 1 22:28 2010年7月20日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2007 - 2018, DesDev, Inc.
  8. * @copyright Copyright (c) 2020, DedeBIZ.COM
  9. * @license https://www.dedebiz.com/license/v6
  10. * @link https://www.dedebiz.com
  11. */
  12. require_once(dirname(__FILE__).'/config.php');
  13. CheckPurview('sys_ArcBatch');
  14. require_once(dirname(__FILE__).'/../include/oxwindow.class.php');
  15. //ShowMsg("目前暂不需要此工具,以后有需要系统会进行自动升级这个程序!<br /><a href='index_body.php'>&lt;&lt;点击此返回&gt;&gt;</a>", "javascript:;");
  16. //exit();
  17. if(empty($dopost))
  18. {
  19. $win = new OxWindow();
  20. $win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
  21. $win->mainTitle = "系统修复工具";
  22. $wecome_info = "<a href='index_body.php'>系统主页</a> &gt;&gt; 系统错误修复工具";
  23. $win->AddTitle('本工具用于检测和修复你的系统可能存在的错误');
  24. $msg = "
  25. <table width='98%' border='0' cellspacing='0' cellpadding='0' align='center'>
  26. <tr>
  27. <td height='250' valign='top'>
  28. <br />
  29. 由于手动升级时用户没运行指定的SQL语句,或自动升级的遗漏处理或处理出错,可能会导致一些错误,使用本工具会自动检测并处理。<br /><br />
  30. <b>本工具目前主要执行下面动作:</b><br />
  31. 1、修复/优化数据表;<br />
  32. 2、更新系统缓存;<br />
  33. 3、检测系统变量一致性。<br />
  34. 4、检测微表与主表数据一致性。<br />
  35. <br />
  36. <br />
  37. <a href='sys_repair.php?dopost=1' style='font-size:18px;color:red'><b>点击此开始进行常规检测&gt;&gt;</b></a>
  38. <br /><br /><br />
  39. </td>
  40. </tr>
  41. </table>
  42. ";
  43. $win->AddMsgItem("<div style='padding-left:20px;line-height:150%'>$msg</div>");
  44. $winform = $win->GetWindow('hand','');
  45. $win->Display();
  46. exit();
  47. }
  48. /*-------------------
  49. 数据结构常规检测
  50. function 1_test_db() { }
  51. --------------------*/
  52. else if($dopost==1)
  53. {
  54. $win = new OxWindow();
  55. $win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
  56. $win->mainTitle = "系统修复工具";
  57. $wecome_info = "<a href='sys_repair.php'>系统错误修复工具</a> &gt;&gt; 检测数据结构";
  58. $win->AddTitle('本工具用于检测和修复你的系统可能存在的错误');
  59. $msg = "
  60. <table width='98%' border='0' cellspacing='0' cellpadding='0' align='center'>
  61. <tr>
  62. <td height='250' valign='top'>
  63. <b><font color='green'>已完成数据结构完整性检测!</font></b>
  64. <hr size='1'/>
  65. <br />
  66. <b>如果你系统有下面几种问题之一,请检测微表正确性:</b><br />
  67. 1、无法获得主键,因此无法进行后续操作<br />
  68. 2、更新数据库archives表时出错<br />
  69. 3、列表显示数据目与实际文档数不一致<br />
  70. <br />
  71. <a href='sys_repair.php?dopost=2' style='font-size:18px;'><b>点击此检测微表正确性&gt;&gt;</b></a>
  72. <br /><br /><br />
  73. </td>
  74. </tr>
  75. </table>
  76. ";
  77. $win->AddMsgItem("<div style='padding-left:20px;line-height:150%'>$msg</div>");
  78. $winform = $win->GetWindow('hand','');
  79. $win->Display();
  80. exit();
  81. }
  82. /*-------------------
  83. 检测微表正确性并尝试修复
  84. function 2_test_arctiny() { }
  85. --------------------*/
  86. else if($dopost==2)
  87. {
  88. $msg = '';
  89. $allarcnum = 0;
  90. $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__archives` ");
  91. $allarcnum = $arcnum = $row['dd'];
  92. $msg .= "·#@__archives 表总记录数: {$arcnum} <br />";
  93. $shtables = array();
  94. $dsql->Execute('me', " SELECT addtable FROM `#@__channeltype` WHERE id < -1 ");
  95. while($row = $dsql->GetArray('me') )
  96. {
  97. $addtable = strtolower(trim(str_replace('#@__', $cfg_dbprefix, $row['addtable'])));
  98. if(empty($addtable))
  99. {
  100. continue;
  101. }
  102. else
  103. {
  104. if( !isset($shtables[$addtable]) )
  105. {
  106. $shtables[$addtable] = 1;
  107. $row = $dsql->GetOne("SELECT COUNT(aid) AS dd FROM `$addtable` ");
  108. $msg .= "·{$addtable} 表总记录数: {$row['dd']} <br />";
  109. $allarcnum += $row['dd'];
  110. }
  111. }
  112. }
  113. $msg .= "※总有效记录数: {$allarcnum} <br /> ";
  114. $errall = "<a href='index_body.php' style='font-size:14px;'><b>完成修正或无错误返回&gt;&gt;</b></a>";
  115. $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctiny` ");
  116. $msg .= "※微统计表记录数: {$row['dd']}<br />";
  117. if($row['dd']==$allarcnum)
  118. {
  119. $msg .= "<p style='color:green;font-size:16px'><b>两者记录一致,无需修正!</b></p><br />";
  120. }
  121. else
  122. {
  123. $sql = " TRUNCATE TABLE `#@__arctiny`";
  124. $dsql->ExecuteNoneQuery($sql);
  125. $msg .= "<font color='red'>两者记录不一致,尝试进行简单修正...</font><br />";
  126. //导入普通模型微数据
  127. $sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
  128. SELECT id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid FROM `#@__archives` ";
  129. $dsql->ExecuteNoneQuery($sql);
  130. //导入单表模型微数据
  131. foreach($shtables as $tb=>$v)
  132. {
  133. $sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
  134. SELECT aid, typeid, 0, arcrank, channel, senddate, 0, mid FROM `$tb` ";
  135. $rs = $dsql->ExecuteNoneQuery($sql);
  136. $doarray[$tb] = 1;
  137. }
  138. $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM `#@__arctiny` ");
  139. if($row['dd']==$allarcnum)
  140. {
  141. $msg .= "<p style='color:green;font-size:16px'><b>修正记录成功!</b></p><br />";
  142. }
  143. else
  144. {
  145. $msg .= "<p style='color:red;font-size:16px'><b>修正记录失败,建议进行高级综合检测!</b></p><br />";
  146. $errall = " <a href='sys_repair.php?dopost=3' style='font-size:14px;'><b>进行高级结合性检测&gt;&gt;</b></a> ";
  147. }
  148. }
  149. UpDateCatCache();
  150. $win = new OxWindow();
  151. $win->Init("sys_repair.php", "js/blank.js", "POST' enctype='multipart/form-data' ");
  152. $win->mainTitle = "系统修复工具";
  153. $wecome_info = "<a href='sys_repair.php'>系统错误修复工具</a> &gt;&gt; 检测微表正确性";
  154. $win->AddTitle('本工具用于检测和修复你的系统可能存在的错误');
  155. $msg = "
  156. <table width='98%' border='0' cellspacing='0' cellpadding='0' align='center'>
  157. <tr>
  158. <td height='250' valign='top'>
  159. {$msg}
  160. <hr />
  161. <br />
  162. {$errall}
  163. </td>
  164. </tr>
  165. </table>
  166. ";
  167. $win->AddMsgItem("<div style='padding-left:20px;line-height:150%'>$msg</div>");
  168. $winform = $win->GetWindow('hand','');
  169. $win->Display();
  170. exit();
  171. }
  172. /*-------------------
  173. 高级方式修复微表(会删除不合法主键的内容)
  174. function 3_re_arctiny() { }
  175. --------------------*/
  176. else if($dopost==3)
  177. {
  178. $errnum = 0;
  179. $sql = " TRUNCATE TABLE `#@__arctiny`";
  180. $dsql->ExecuteNoneQuery($sql);
  181. $sql = "SELECT arc.id, arc.typeid, arc.typeid2, arc.arcrank, arc.channel, arc.senddate, arc.sortrank,
  182. arc.mid, ch.addtable FROM `#@__archives` arc LEFT JOIN `#@__channeltype` ch ON ch.id=arc.channel ";
  183. $dsql->Execute('me', $sql);
  184. while($row = $dsql->GetArray('me') )
  185. {
  186. $sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
  187. VALUES('{$row['id']}','{$row['typeid']}','{$row['typeid2']}','{$row['arcrank']}',
  188. '{$row['channel']}','{$row['senddate']}','{$row['sortrank']}','{$row['mid']}'); ";
  189. $rs = $dsql->ExecuteNoneQuery($sql);
  190. if(!$rs)
  191. {
  192. $addtable = trim($addtable);
  193. $errnum ++;
  194. $dsql->ExecuteNoneQuery("DELETE FROM `#@__archives` WHERE id='{$row['id']}' ");
  195. if(!empty($addtable)) $dsql->ExecuteNoneQuery("DELETE FROM `$addtable` WHERE id='{$row['id']}' ");
  196. }
  197. }
  198. //导入单表模型微数据
  199. $dsql->SetQuery("SELECT id,addtable FROM `#@__channeltype` WHERE id < -1 ");
  200. $dsql->Execute();
  201. $doarray = array();
  202. while($row = $dsql->GetArray())
  203. {
  204. $tb = str_replace('#@__', $cfg_dbprefix, $row['addtable']);
  205. if(empty($tb) || isset($doarray[$tb]) )
  206. {
  207. continue;
  208. }
  209. else
  210. {
  211. $sql = "INSERT INTO `#@__arctiny`(id, typeid, typeid2, arcrank, channel, senddate, sortrank, mid)
  212. SELECT aid, typeid, 0, arcrank, channel, senddate, 0, mid FROM `$tb` ";
  213. $rs = $dsql->ExecuteNoneQuery($sql);
  214. $doarray[$tb] = 1;
  215. }
  216. }
  217. $win = new OxWindow();
  218. $win->Init("sys_repair.php","js/blank.js","POST' enctype='multipart/form-data' ");
  219. $win->mainTitle = "系统修复工具";
  220. $wecome_info = "<a href='sys_repair.php'>系统错误修复工具</a> &gt;&gt; 高级综合检测修复";
  221. $win->AddTitle('本工具用于检测和修复你的系统可能存在的错误');
  222. $msg = "
  223. <table width='98%' border='0' cellspacing='0' cellpadding='0' align='center'>
  224. <tr>
  225. <td height='250' valign='top'>
  226. 完成所有修复操作,移除错误记录 {$errnum} 条!
  227. <hr />
  228. <br />
  229. <a href='index_body.php' style='font-size:14px;'><b>完成修正或无错误返回&gt;&gt;</b></a>
  230. </td>
  231. </tr>
  232. </table>
  233. ";
  234. $win->AddMsgItem("<div style='padding-left:20px;line-height:150%'>$msg</div>");
  235. $winform = $win->GetWindow('hand','');
  236. $win->Display();
  237. exit();
  238. }