无限星辰工作室-客户无限互联网动力之源

标题: Discuz!x3.2 云平台恢复工具 [打印本页]

作者: crx349    时间: 2016-12-24 21:49
标题: Discuz!x3.2 云平台恢复工具
  1. <?php
  2. /**
  3. * 用于DISCUZ X站长注册的工具
  4. *
  5. * $Id: discuzx_utility.php 12116 2012-03-12 07:07:22Z yexinhao $
  6. */

  7. require './source/class/class_core.php';

  8. $cachelist = array();
  9. $discuz = & discuz_core::instance();

  10. $discuz->cachelist = $cachelist;
  11. $discuz->init_cron = false;
  12. $discuz->init_setting = true;
  13. $discuz->init_user = false;
  14. $discuz->init_session = false;

  15. $discuz->init();

  16. if ($_POST) {
  17.         $fromCloud = $_POST['fromCloud'];
  18.         if ($fromCloud) {
  19.                 if (is_file(DISCUZ_ROOT . './data/discuzx_utility.lock')) {
  20.                         echo "LOCK";
  21.                 } else {
  22.                         echo "OK";
  23.                 }
  24.                 exit;
  25.         }

  26.         $siteUrl = $_POST['siteUrl'];

  27.         $action = $_POST['action'];
  28.         if ($action == 'restore') {
  29.                 $my_siteid = $_POST['my_siteid'];
  30.                 $my_sitekey = $_POST['my_sitekeys'][$my_siteid];
  31.                 $cloud_status = intval($_POST['cloud_status'][$my_siteid]);

  32.                 if (!$my_siteid || !$my_sitekey) {
  33.                         echo "无效的my_siteid或my_sitekey";
  34.                         exit;
  35.                 }

  36.                 DB::query("REPLACE INTO " . DB::table('common_setting') . " (skey, svalue) VALUES ('my_siteid', '{$my_siteid}'), ('my_sitekey', '{$my_sitekey}'), ('cloud_status', $cloud_status)");
  37. //                C::t('common_setting')->update_batch(array('my_siteid' => $my_siteid, 'my_sitekey' =>$my_sitekey ,'cloud_status' => $cloud_status));
  38.                 require_once libfile('function/cache');
  39.                 updatecache('setting');
  40.                 my_show_message("Discuz!云平台站点信息恢复成功 (请立即到管理后台云平台同步站点信息)");
  41.         }
  42. } else {
  43.         if ($_GET['q'] == 'forgot') {
  44.                 $sites = my_site_restore();
  45.                 my_forgot($sites);

  46.         } else {
  47.                 my_index();
  48.         }
  49. }

  50. function my_header() {
  51.         header("Content-Type: text/html; charset=utf-8");
  52.         echo <<<EOT
  53. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  54. <html xmlns="http://www.w3.org/1999/xhtml">
  55.         <head>
  56.                 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  57.                 <title>DISCUZ X站点注册工具 | 找回(恢复)站点信息、删除站点信息</title>
  58.                 <style type="text/css">
  59.                         body {
  60.                                 width: 70%;
  61.                         }
  62.                         .msg, .warning {
  63.                                 padding: 10px;
  64.                                 border: 1px solid #06c;
  65.                                 background-color: #c6dff9;
  66.                         }

  67.                         .warning {
  68.                                 border-color: #ffd700;
  69.                                 background-color: #ffc;
  70.                         }
  71.                         .op {
  72.                                 line-height: 2em;
  73.                         }
  74.                         .op a {
  75.                                 font-size: 1.2em;
  76.                         }
  77.                 </style>
  78.         </head>
  79.         <body class="sidebars">\n
  80. EOT;
  81. }

  82. function my_footer() {
  83.         global $_G;
  84.         echo <<<EOT
  85.                         <hr />
  86.                         <div class="warn">
  87.                                 <h3>注意事项</h3>
  88.                                 <ul>
  89.                                         <li>请勿随意公开该文件地址</li>
  90.                                         <li>使用完毕之后,请<strong>立即删除</strong>该文件</li>
  91.                                 </ul>
  92.                         </div>
  93.                         <p><a href="{$_G['siteurl']}">返回我的网站</a> | <a href="http://www.discuz.net/" target="_blank">支持论坛</a></p>
  94.         </body>
  95. </html>\n
  96. EOT;
  97. }

  98. function my_index() {
  99.         global $_G;
  100.         $siteUrl = $_G['siteurl'];
  101.         $my_siteid = $_G['setting']['my_siteid'] ? $_G['setting']['my_siteid'] : '无';
  102.         $my_sitekey = $_G['setting']['my_sitekey'] ? $_G['setting']['my_sitekey'] : '无';
  103.         $cloud_status = $_G['setting']['cloud_status'] ? ($_G['setting']['cloud_status'] ? '开启': '关闭') : '无';;
  104.         $uri = my_get_uri();
  105.         my_header();
  106.         echo <<<EOT
  107.                 <form method="POST">
  108.                         <dl>
  109.                                 <dt>当前站点地址:</dt>
  110.                                 <dd>$siteUrl</dd>

  111.                                 <dt>当前站点ID:</dt>
  112.                                 <dd>$my_siteid</dd>

  113.                                 <dt>当前站点Key:</dt>
  114.                                 <dd>$my_sitekey</dd>

  115.                                 <dt>当前云平台状态:</dt>
  116.                                 <dd>$cloud_status</dd>
  117.                         </dl>
  118.                         <p class="op">
  119.                                 如果您要恢复Discuz!云平台数据,请<a href="$uri?q=forgot">点这里继续</a>
  120.                         </p>
  121.                         <p class="warning">以上操作可能导致Discuz!云平台中当前站点服务无法使用、用户信息丢失!</p>
  122.                 </form>
  123. EOT;
  124.         my_footer();
  125. }

  126. function my_forgot($sites) {
  127.         global $_G;
  128.         my_header();
  129.         my_title('恢复Discuz!云平台上的站点信息');
  130.         $siteUrl = $_G['siteurl'];
  131.         $table = "<table border="1">
  132.                 <tr>
  133.                         <th></th>
  134.                         <th>站点ID</th>
  135.                         <th>站点Key</th>
  136.                         <th>站点uniqueid</th>
  137.                         <th>创建时间</th>
  138.                         <th>状态</th>
  139.                 </tr>";
  140.         foreach($sites as $site) {
  141.                 $sId = $site['sId'];
  142.                 $table .= "<tr>
  143.                                 <td><input type='radio' name='my_siteid' value='$sId' /></td>
  144.                                 <td>{$site['sId']}</td>
  145.                                 <td>{$site['sKey']}</td>
  146.                                 <td>{$site['sSiteKey']}</td>
  147.                                 <td>{$site['sCreated']}</td>
  148.                                 <td>{$site['status']}</td>
  149.                                 <input type='hidden' name='my_sitekeys[$sId]' value='$site[sKey]' />
  150.                                 <input type='hidden' name='cloud_status[$sId]' value='$site[cloudStatus]' />
  151.                         </tr>";
  152.         }
  153.         $table .= "</table>\n";
  154.         echo <<<EOT
  155.                 <form method="POST">
  156.                         $table
  157.                         <p>
  158.                                 <input type="hidden" name="action" value="restore" />
  159.                                 <input type="submit" name="submit" value="恢复云平台数据" />
  160.                         </p>
  161.                 </form>
  162. EOT;
  163.         my_footer();
  164. }

  165. function my_title($title = 'index') {
  166.         echo "<h2>$title</h2>\n";
  167.         return true;
  168. }

  169. function my_site_restore() {

  170.     if (class_exists('Cloud')) {
  171.         // X2.5 修复
  172.         $cloudClient = Cloud::loadClass('Service_Client_Cloud');

  173.         try {
  174.             $result = $cloudClient->resume();
  175.         } catch (Exception $e) {
  176.             $msg = sprintf('操作失败:%s (#%s)', $e->getMessage(), $e->getCode());
  177.             my_show_message($msg);
  178.         }
  179.     } else {
  180.         // X2 修复
  181.         require_once DISCUZ_ROOT.'/api/manyou/Manyou.php';
  182.         $cloudClient = new Discuz_Cloud_Client();

  183.         $result = $cloudClient->resume();

  184.         if(!$result || $cloudClient->errno) {
  185.             $msg = sprintf('操作失败:%s (#%s)', $cloudClient->errmsg, $cloudClient->errno);
  186.             my_show_message($msg);
  187.         }
  188.     }

  189.         // lock file
  190.         $fp = fopen(DISCUZ_ROOT . './data/discuzx_utility.lock', 'w');
  191.         if ($fp === false) {
  192.                 my_show_message(sprintf('请确保 <strong>%s/data/discuzx_utility.lock</strong> 文件可写!', DISCUZ_ROOT));
  193.         }
  194.         fclose($fp);
  195.         return $result;

  196. }

  197. function my_show_message($msg) {
  198.         my_header();
  199.         printf('<p class="msg">%s</p>', $msg);
  200.         my_footer();
  201.         exit;
  202. }

  203. function my_get_uri() {
  204.         $uri = $_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:($_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME']);
  205.         return $uri;
  206. }

  207. ?>
复制代码







欢迎光临 无限星辰工作室-客户无限互联网动力之源 (https://xmspace.net/) Powered by Discuz! X3.4