云计算开发者社区

用新浪微博连接

一步搞定

查看: 19297|回复: 25

终于来了!KVDB第三方备份恢复面板 [复制链接]

Rank: 4

发表于 2012-7-1 17:50:20 |显示全部楼层
尼玛,在资源区发个帖都没权限!就在这里了,管理移一下吧… 求升级…

大家一直都很需要,其实你们都会的是吧,就是懒!!懒!!要我们这些小白来写,折腾了一下午。
非全部原创,改写的多。向参考的原作者表示感谢。

貌似哪里有个悬赏的,咱也不图那个,只是方便自己方便大家!尊重作者,请保留版权信息,转载注明出处


复制,保存为 kvbackup.php
<?php
@session_start();
$pass = '123456';//注意修改密码

$db=new db();
$type=$_REQUEST['type'];
$ex=$_REQUEST['ex'];
$fileName=$_SERVER['HTTP_APPNAME']."-".date('Y.m.d');
if ($ex<>"") $fileName=$fileName."-".$ex;

if($type=="login"){
    $passwd = $_POST['passwd'];
    if($passwd == $pass ){
      $_SESSION['admin'] = 1;
    }
    header("Location:{$_SERVER['PHP_SELF']}");
}elseif($type=="logout"){
    @session_destroy();
    header("Location:{$_SERVER['PHP_SELF']}");
}
 
if(!isset($_SESSION['admin'])){
    echo '<form action="?type=login" method="post">密码:'."<input type='passwd' name='passwd' value='' /> <input type='submit' name='submit' value='登录' /></form>";;
    exit;
}

if ($type=="Json")
    // 生成 Json
    echo  $db->toExtJson($ex,$fileName);
elseif($type=="Xml")
    // 生成 Xml
    echo  $db->toExtXml($ex,$fileName);
elseif($type=="Excel")
    // 生成 Excel
    echo  $db->toExcel($ex,$fileName);
elseif($type=="Word")
    // 生成 Word
    echo  $db->toWord($ex,$fileName);
elseif($type=="up"){
    echo  $db->putToKVDB($_FILES['upFile']['tmp_name']);
}else{
?>
<html>
<title>SAE KVDB Ghost - Powered By Cp0204</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<body>
<h3>SAE KVDB Ghost</h3>
<pre>
======KVDB备份======
<form name="readform" action="" method="get">
备份类型:<select name="type">
<option value="Json">Json</option>
<option value="Xml">Xml</option>
<option value="Excel">Excel</option>
<option value="Word">Word</option>
</select>    key前缀:<input type="text" name="ex" />    <input type="submit" value="备份" />
</form>
======KVDB恢复======
<form name="sendform" action="?type=up" method="post" enctype="multipart/form-data">
(只支持Json备份恢复,恢复前需重启KVDB服务清空,否则为覆盖)
备份文件:<input type="file" name="upFile" id="file" />    <input type="submit" value="恢复" />
</form>

<a href="?type=logout">Logout</a>
</pre>
</body>
</html>
<?
}

class Db{

function toExtJson($ex,$fileName){
    header("Content-Type: text/json");
    header('Content-Disposition: attachment; filename="'.$fileName.'.json"');
    $results=$this->findByKVDB($ex);
    $json=json_encode($results);
    return $json;
}

function toExtXml($ex,$fileName){
    header("Content-Type: text/xml");
    header('Content-Disposition: attachment; filename="'.$fileName.'.xml"');
    $xml="<?xml version=\"1.0\"  encoding=\"utf-8\" ?>\n";
    $xml.="<kvdb>\n";
    $xml.="\t<app>{$_SERVER['HTTP_APPNAME']}</app>\n";
    $results=$this->findByKVDB($ex);
    foreach($results as $key=>$val)
      $xml.="\t<key>{$key}</key><val>{$val}</val>\n";
    $xml.="</kvdb>\n";
    return $xml;
}

//输出word表格
function toWord($ex,$fileName){
    header('Content-type: application/doc');
    header('Content-Disposition: attachment; filename="'.$fileName.'.doc"');
    echo '
    <html xmlns\"\"="urn:schemas-microsoft-com\"\"ffice\"\"ffice"
    xmlns:w="urn:schemas-microsoft-com\"\"ffice:word"
    xmlns="http://www.w3.org/TR/REC-html40">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>'.$fileName.'</title>
    </head>
    <body>';
    echo'<table border=1>';
    echo'<tr><td>key</td><td>val</td><tr>';
    $results=$this->findByKVDB($ex);
    foreach($results as $key=>$val)
      echo'<tr><td>'.$key.'</td><td>'.$val.'</td></tr>';
    echo'</table>';
    echo'</body>';
    echo'</html>';
}

function toExcel($ex,$fileName){
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:filename=".$fileName.".xls");
    echo'
    <html xmlns\"\"="urn:schemas-microsoft-com\"\"ffice\"\"ffice"
    xmlns:x="urn:schemas-microsoft-com\"\"ffice:excel"
    xmlns="http://www.w3.org/TR/REC-html40">
    <head>
    <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
    <!--[if gte mso 9]><xml>
    <x:ExcelWorkbook>
    <x:ExcelWorksheets>
          <x:ExcelWorksheet>
            <x:Name></x:Name>
            <x:WorksheetOptions>
              <x\"\"isplayGridlines/>
            </x:WorksheetOptions>
          </x:ExcelWorksheet>
    </x:ExcelWorksheets>
    </x:ExcelWorkbook>
    </xml><![endif]-->
    </head>
    <body link=blue vlink=purple leftmargin=0 topmargin=0>';
    echo'<table width="100%" border="0" cellspacing="0" cellpadding="0">';
    echo'<tr><td>key</td><td>val</td><tr>';
    $results=$this->findByKVDB($ex);
    foreach($results as $key=>$val)
      echo'<tr><td>'.$key.'</td><td>'.$val.'</td></tr>';
    echo'</table>';
    echo'</body>';
    echo'</html>';
}

function findByKVDB($ex){
    $kv = new SaeKV();
    $kv->init();
    $ret = $kv->pkrget($ex, 100);
    while (true) {
      foreach($ret as $k=>$v)
        $results[$k]=$v;
      end($ret);
      $start_key = key($ret);
      $i = count($ret);
      if ($i < 100) break;
      $ret = $kv->pkrget($ex, 100, $start_key);
    }
    return $results;
}

function putToKVDB($fileName){
    $kv = new SaeKV();
    $kv->init();
    $json=file_get_contents($fileName);
    $results=json_decode($json);
    foreach($results as $k=>$v)
      $kv->set($k, $v);
    echo "恢复完成!";
}

}
?>

        
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

使用道具 举报

发表于 2012-7-1 20:11:30 |显示全部楼层
不错喔,赞一个。
PS:LZ貌似对代码的美化不看重,我觉得代码的美化很重要喔,还有就是函数的注释。

点评

成鹏浓硫酸170度  呵呵,确实没什么注释… 美化我尽力了。。。该缩进的都缩了,其实很好读的  发表于 2012-7-1 20:18:46
博客:mner.net,AD:出售高质量外链(包括政府站),有意者PM

使用道具 举报

Rank: 4

发表于 2012-7-1 21:05:42 |显示全部楼层
不错不错,但是前缀不是只能查找100行吗?

点评

成鹏浓硫酸170度  这样的话,前缀为空理所当然就是列完全部了  发表于 2012-7-1 22:33:43
成鹏浓硫酸170度  一次100行,循环到找完… 前缀的意思是,比如你有abc123 abc5125 ac555三项 前缀填abc只找到abc123 abc5125 填a则找到abc123 abc5125 ac555  发表于 2012-7-1 22:31:08

使用道具 举报

Rank: 4

发表于 2012-7-1 23:29:11 |显示全部楼层
弱弱问下楼主,高级开发不是要满足
2. 符合以下任意一项:
    1) 知名IT企业员工   2) 知名技术博客
1不太可能吧,看楼主的样子刚准备上大学
那就是2咯,能不能围观下博客?

点评

海城市歌珊地养殖专业合作社  天才是什么?  发表于 2012-7-20 16:46:37

使用道具 举报

Rank: 4

发表于 2012-7-1 23:45:05 |显示全部楼层
收藏了。

前端学习Javascript,后台学习PHP。
http://www.cnblogs.com/liminju

使用道具 举报

Rank: 9Rank: 9Rank: 9

发表于 2012-7-2 11:05:49 |显示全部楼层
word还可以这样保存?

使用道具 举报

Rank: 4

发表于 2012-7-2 13:27:22 |显示全部楼层
文峰 发表于 2012-7-2 11:05
word还可以这样保存?

XML格式的WORD

使用道具 举报

Rank: 1

发表于 2012-7-2 13:33:31 |显示全部楼层
非常好!

使用道具 举报

发表于 2012-7-2 19:04:44 |显示全部楼层
MeeSii 发表于 2012-7-1 21:05
不错不错,但是前缀不是只能查找100行吗?

偏移啊,查找前缀里有这个参数的。
博客:mner.net,AD:出售高质量外链(包括政府站),有意者PM

使用道具 举报

发表于 2012-7-2 19:07:13 |显示全部楼层
leo108这名字都有人抢 发表于 2012-7-1 23:29
弱弱问下楼主,高级开发不是要满足
2. 符合以下任意一项:
    1) 知名IT企业员工   2) 知名技术博客

所谓知名技术博客,说穿了,就是文章质量较高的博客,如果真要严格要求“知名”,那我想,估计不是太多。
想达到知名,不可谓不难啊!来混SAE的,或许小有名气(没说绝对没有知名的,只是说说罢了),但能算“知名”么?
所以“知名”博客,只要博客质量较高就行了。

点评

贾浊漳  楼上太逗了 哈哈  发表于 2012-9-3 12:56:23
海城市歌珊地养殖专业合作社  新浪博客算知名博客吧  发表于 2012-7-20 16:47:09
博客:mner.net,AD:出售高质量外链(包括政府站),有意者PM

使用道具 举报

发表于 2012-7-2 19:22:38 |显示全部楼层
Leven5 发表于 2012-7-1 20:11
不错喔,赞一个。
PS:LZ貌似对代码的美化不看重,我觉得代码的美化很重要喔,还有就是函数的注释。 ...

我的不是对单行代码注释,而是注释这个函数和函数的参数,单行注释还不累死?
PS:这个东西居然给了#3,BK了……
博客:mner.net,AD:出售高质量外链(包括政府站),有意者PM

使用道具 举报

Rank: 4

发表于 2012-7-2 20:58:17 |显示全部楼层
Leven5 发表于 2012-7-2 19:07
所谓知名技术博客,说穿了,就是文章质量较高的博客,如果真要严格要求“知名”,那我想,估计不是太多。 ...

哈,那我也申请去

使用道具 举报

Rank: 2

发表于 2012-7-3 12:16:52 |显示全部楼层
本帖最后由 路过的小新喵 于 2012-7-3 12:17 编辑

我在想那些把图片等小文件保存在kvdb的怎么办...目测LZ这个直接echo内容了

使用道具 举报

Rank: 4

发表于 2012-7-4 15:41:50 |显示全部楼层
前缀貌似没用,我本地测试不行。
我的key为 Smtp_XXXXX 和 Title_XXXXX 这样两种系列的。
可是我备份是输入前缀 Smtp ,生成的文件里面一样包括了 Title_XXXX 的数据。

点评

成鹏浓硫酸170度  是本地的问题  发表于 2012-7-29 16:33:07

使用道具 举报

Rank: 1

发表于 2012-7-7 10:42:57 |显示全部楼层
有没有xml的pdf格式 的资料呢

使用道具 举报

Rank: 7Rank: 7Rank: 7

新浪云计算官方成员

发表于 2012-7-13 10:34:21 |显示全部楼层
数据量大了好像有问题

使用道具 举报

Rank: 5Rank: 5

发表于 2012-7-23 23:11:20 |显示全部楼层
嗯 不错 学习了
萝莉马仙,法力无边,神通广大,法驾中原!

我们都支持马政委 http://mazhengwei.com

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

发表于 2012-7-29 16:20:29 |显示全部楼层
来学习如何导word的~~!!

使用道具 举报

Rank: 1

发表于 2012-8-13 22:08:30 |显示全部楼层
由于没有python版本的?

使用道具 举报

Rank: 3Rank: 3

发表于 2012-9-11 08:09:41 |显示全部楼层
  1. $kv->set('abc',array(1,2,3,4));
复制代码

这种情况无法正常备份,请楼主在echo前做下判断吧。或许
  1. echo var_export(xxxxx,true);
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|云计算开发者社区 ( 京ICP证000007-137 )

GMT+8, 2018-7-21 19:51 , Processed in 0.225418 second(s), Total 15, Slave 14 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部