国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

sys_repair.php 8.4KB

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