国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.1KB

  1. <?php
  2. /**
  3. * 数据库备份还原
  4. *
  5. * @version $id:sys_data.php 17:19 2010年7月20日 tianya $
  6. * @package DedeBIZ.Administrator
  7. * @copyright Copyright (c) 2022 DedeBIZ.COM
  8. * @license GNU GPL v2 (https://www.dedebiz.com/license)
  9. * @link https://www.dedebiz.com
  10. */
  11. require_once(dirname(__FILE__)."/config.php");
  12. if (DEDEBIZ_SAFE_MODE) {
  13. die(DedeAlert("系统已启用安全模式,无法使用当前功能",ALERT_DANGER));
  14. }
  15. CheckPurview('sys_Data');
  16. if (empty($dopost)) $dopost = '';
  17. if ($cfg_dbtype == 'sqlite') {
  18. showMsg("系统使用SQLite数据库,备份系统根目录下/data/".$cfg_dbname.".db文件即可", "javascript:;");
  19. exit();
  20. }
  21. //查看表结构
  22. if ($dopost == "viewinfo") {
  23. if ($cfg_dbtype == 'sqlite') {
  24. echo "<xmp>";
  25. if (empty($tablename)) {
  26. echo "没有指定表名";
  27. } else {
  28. // 获取创建表的 SQL 语句
  29. $dsql->SetQuery("SELECT sql FROM sqlite_master WHERE type='table' AND name='$tablename'");
  30. $dsql->Execute('me');
  31. $row = $dsql->GetArray('me', SQLITE3_ASSOC);
  32. if ($row) {
  33. $createTableSql = $row['sql'];
  34. echo "创建表的 SQL 语句:\n";
  35. echo trim($createTableSql) . "\n\n";
  36. }
  37. // 获取表的列信息
  38. $dsql->SetQuery("PRAGMA table_info($tablename)");
  39. $dsql->Execute('cols');
  40. echo "表的列信息:\n";
  41. while ($colRow = $dsql->GetArray('cols', SQLITE3_ASSOC)) {
  42. echo "列名: " . $colRow['name'] . ", 类型: " . $colRow['type'] . ", 是否为主键: " . ($colRow['pk'] ? '是' : '否') . "\n";
  43. }
  44. }
  45. echo '</xmp>';
  46. exit();
  47. } else {
  48. echo "<xmp>";
  49. if (empty($tablename)) {
  50. echo "没有指定表名";
  51. } else {
  52. $dsql->SetQuery("SHOW CREATE TABLE ".$dsql->dbName.".".$tablename);
  53. $dsql->Execute('me');
  54. $row2 = $dsql->GetArray('me', MYSQL_BOTH);
  55. $ctinfo = $row2[1];
  56. echo trim($ctinfo);
  57. }
  58. echo '</xmp>';
  59. }
  60. exit();
  61. }
  62. //优化表
  63. else if ($dopost == "opimize") {
  64. echo "<xmp>";
  65. if (empty($tablename)) {
  66. echo "没有指定表名";
  67. } else {
  68. if ($cfg_dbtype == 'sqlite') {
  69. $rs = $dsql->ExecuteNoneQuery("VACUUM");
  70. if ($rs) {
  71. echo "执行优化表 {$tablename} 完成<br>";
  72. } else {
  73. echo "执行优化表 {$tablename} 失败,原因是:" . $dsql->GetError();
  74. }
  75. } else {
  76. $rs = $dsql->ExecuteNoneQuery("OPTIMIZE TABLE `$tablename`");
  77. if ($rs) {
  78. echo "执行优化表".$tablename."完成<br>";
  79. } else {
  80. echo "执行优化表".$tablename."失败,原因是:".$dsql->GetError();
  81. }
  82. }
  83. }
  84. echo '</xmp>';
  85. exit();
  86. }
  87. //修复表
  88. else if ($dopost == "repair") {
  89. echo "<xmp>";
  90. if (empty($tablename)) {
  91. echo "没有指定表名";
  92. } else {
  93. $rs = $dsql->ExecuteNoneQuery("REPAIR TABLE `$tablename`");
  94. if ($rs) {
  95. echo "修复表".$tablename."完成<br>";
  96. } else {
  97. echo "修复表".$tablename."失败,原因是:".$dsql->GetError();
  98. }
  99. }
  100. echo '</xmp>';
  101. exit();
  102. }
  103. //获取系统存在的表信息
  104. $otherTables = array();
  105. $dedeSysTables = array();
  106. $channelTables = array();
  107. $dsql->SetQuery("SELECT addtable FROM `#@__channeltype`");
  108. $dsql->Execute();
  109. while ($row = $dsql->GetObject()) {
  110. $channelTables[] = $row->addtable;
  111. }
  112. $dsql->SetQuery("SHOW TABLES");
  113. $dsql->Execute('t');
  114. while ($row = $dsql->GetArray('t', MYSQL_BOTH)) {
  115. if (preg_match("#^{$cfg_dbprefix}#", $row[0]) || in_array($row[0], $channelTables)) {
  116. $dedeSysTables[] = $row[0];
  117. } else {
  118. $otherTables[] = $row[0];
  119. }
  120. }
  121. $mysql_version = $dsql->GetVersion();
  122. include DedeInclude('templets/sys_data.htm');
  123. function TjCount($tbname, &$dsql)
  124. {
  125. $row = $dsql->GetOne("SELECT COUNT(*) AS dd FROM $tbname");
  126. return $row['dd'];
  127. }
  128. ?>