邓先生的资源库

typecho添加主题备份及恢复功能

typecho 换主题很简单,但是确有一个比较麻烦的事情,就是主题配置在切换主题的同时也就被删除了。于是,今天我下决心要弄一个备份恢复的功能出来。网上查了很久,都没有找到适合的(不过还是有参考价值的)。最后,只能自己构思,一步一步的落实了。


备份功能:对当前主题进行备份

备份方式:用的是文件备份


实现步骤:

确定文件备份的路径

对备份的主题和已保存的主题做个对比,数据相同则不出现备份和恢复信息,否则提醒备份

备份和恢复后,刷新界面(用了个不太理想的效果)

接下来是代码实现部分:



一、确定文件备份的路径



我因为之前用订阅 rss ,在当前主题目录下建立了 tmp 目录,因此就选他了。不过,一定记得要赋予可写权限,linux 系统赋权命令如下:


chmod 777 -R tmp/


二、在主题 funcitons.php 文件的 themeConfig($form){} 方法中添加编写代码

通常将备份恢复的模块放在网页的最前面,将下面的代码,复制到themeConfig($form){}的括号中间最前面就可以。


// 主题配置备份和恢复--开始//
echo '<div style="border:1px dashed green;padding:1rem;">';
echo '<div style="color:red;font-weight:700;margin-bottom:.5rem">备份前请确保主题目录下建立了tmp目录,并且被赋予可写权限</div>';
$theTheme = Helper::options()->theme;
$db = Typecho_Db::get();
// 设置备份及恢复目录
$backPath = __DIR__ . '/tmp/' . $theTheme . '.txt';

// 获取保存的主题配置信息
$themeConfStr = $db->fetchRow($db->select()->from('table.options')->where('name = ?', 'theme:' . $theTheme))['value'];

// 判断是否要备份配置
if (file_exists($backPath)) {
    $backstr = file_get_contents($backPath); //将整个文件内容读入到一个字符串中
} else {
    $backstr = '';
}

if (strcmp($backstr, $themeConfStr) === 0) {
    echo '当前主题保存的配置信息与备份的配置信息一致,无需备份和恢复';
} else {
    echo '<div style="font-weight:700;margin-bottom:.5rem;">当前主题保存的配置信息与备份的配置信息<span style="color:red;">不一致,请确认是否需要备份或恢复</span> </div><form action="" method="post"><input id="backupbtn" type="submit" name="backup" value="备份主题配置"><input id="restorebtn" type="submit" name="restore" value="恢复主题配置"></form><br>';
}

if ($_POST["backup"]) {
    $backThemeCon = file_put_contents($backPath, $themeConfStr);
    if ($backThemeCon) {
        echo '<script>alert("备份成功")</script>';
        echo "<script>window.location.replace(window.location.href)</script>";
    } else {
        echo '备份失败,请检查 tmp 目录是否有可写权限';
    }
}

if ($_POST["restore"]) {
    if (file_exists($backPath)) {
        $str = file_get_contents($backPath); //将整个文件内容读入到一个字符串中
        $updateThemeConQuery = $db->update('table.options')->rows(array('value' => $str))->where('name = ?', 'theme:' . $theTheme);
        $updateThemCon = $db->query($updateThemeConQuery);
        if ($updateThemCon) {
            echo '<script>alert("恢复成功")</script>';
            echo "<script>window.location.replace(window.location.href)</script>";
        } else {
            echo '恢复失败,请检查主题配置备份数据是否合格';
        }
    }
}
echo '</div>';
// 主题配置恢复备份--结束//


本原创文章未经允许不得转载 | 当前页面:邓先生的资源库 » typecho添加主题备份及恢复功能

评论


|  Sitemap  |  App  |  Status  |  Stats  |  E-Mail |

已续  ,感谢有你
陕ICP备2022002237号

  开往-友链接力  飞翔