备份 / 恢复数据库

exec — 执行一个外部程序(在 php 文件所在目录进行执行)

很久以前写的,很多方法是项目中的直接复制粘体用不了,只能提供下思路。

用到执行外部程序的就这一句:

exec("mysql -u$username -p$password $database < $backup_path$backup_name");

<?php
defined('BASEPATH') OR exit('No direct script access allowed'); class Database extends MY_Controller {
private $backup_path;
public function __construct(){
parent::__construct();
$this->backup_path = dirname($_SERVER['SCRIPT_FILENAME']).DIRECTORY_SEPARATOR.'db_backup'.DIRECTORY_SEPARATOR;
} public function index(){
$this->loadViewhf('back/database.html');
} public function list_backup(){ //打开文件夹
$dir_handle = opendir($this->backup_path);
//读取文件夹
$backup_names = array();
while(false !== $file = readdir($dir_handle)){
if ($file == '.' || $file == '..') continue;
// 创建每一行数据
$table_row_map = (object)array(
'backup_name' => $file,
'backup_path' => '~/db_backup'
);
// 加入每一行数据到data
$result['data'][] = $table_row_map;
}
//返回结果
$this->returnResult($result);
} public function backup(){ // 选择备份路径(网站根目录下的db_backup文件夹)
$backup_path = $this->backup_path;
// 生成备份文件名
$backup_name = date("Y-m-d_H-i-s").'_backup.sql';;
// 进行备份
$username = $this->db->username;
$password = $this->db->password;
$database = $this->db->database;
exec("mysqldump -u$username -p$password $database > $backup_path$backup_name");
// 返回结果
$result['status'] = true;
$this->returnResult($result);
} public function del_backup(){
// 备份文件名
$backup_name = $this->input->post('backup_name', true);
// 选择备份路径(网站根目录下的db_backup文件夹)
$backup_path = $this->backup_path;
// 删除
if (unlink($backup_path.$backup_name)) {
$result['status'] = true;
}else{
$result['status'] = false;
}
// 返回结果
$this->returnResult($result);
} public function recover_backup(){
// 备份文件名
$backup_name = $this->input->post('backup_name', true);
// 选择备份路径(网站根目录下的db_backup文件夹)
$backup_path = $this->backup_path;
// 恢复备份
$username = $this->db->username;
$password = $this->db->password;
$database = $this->db->database;
exec("mysql -u$username -p$password $database < $backup_path$backup_name");
// 返回结果
$result['status'] = true;
$this->returnResult($result);
} }

CSS - 层叠上下文(The stacking context)的更多相关文章

  1. CSS——关于z-index及层叠上下文(stacking context)

    以下内容根据CSS规范翻译. z-index 'z-index'Value: auto | <integer> | inheritInitial: autoApplies to: posi ...

  2. 层叠上下文(The stacking context)

    MDNThe stacking context 层叠上下文是HTML元素的三维概念,这些HTML元素在一条假想的相对于面向(电脑屏幕的)视窗或者网页的用户的z轴上延伸,HTML元素依据其自身属性按照优 ...

  3. 彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index

    前言 最近,在项目中遇到一个关于CSS中元素z-index属性的问题,具体问题不太好描述,总结起来就是当给元素和父元素色设置position属性和z-index相关属性后,页面上渲染的元素层级结果和我 ...

  4. 带大家认识CSS层叠上下文/层叠等级的区别和意义

    什么是“层叠上下文” 层叠上下文(stacking context),是HTML中一个三维的概念.在CSS2.1规范中,每个盒模型的位置是三维的,分别是平面画布上的X轴,Y轴以及表示层叠的Z轴.一般情 ...

  5. 20190409-层叠の层叠上下文、层叠水平、层叠顺序、z-index、伪元素层叠

    写在前面乱七八糟的前言: 此"八卦"的源于,在写下图这个圆滚滚的导航布局时,使用元素及其伪元素加上绝对定位完成,但遇到:before或:after伪元素与元素的层叠顺序,就是伪元素 ...

  6. 层叠上下文 Stacking Context

    层叠上下文 Stacking Context 在CSS2.1规范中,每个盒模型的位置是三维的,分别是平面画布上的x轴,y轴以及表示层叠的z轴.对于每个html元素,都可以通过设置z-index属性来设 ...

  7. 一篇通俗易懂的CSS层叠顺序与层叠上下文研究

    网上有很多这方面的教程,但不是苦涩难懂就是从哪copy过来的,反正很长一段时间我是没看懂,时间长了也没打算去研究了,主要原因是,基本上很少会遇到那些问题(所以说啊,要是没有研究精神的才懒得管它).但自 ...

  8. 关于stacking context和CSS z-index的总结

    HTML中决定元素叠加顺序的CSS属性最有名的应该是z-index了.但是,往往在项目中发现有些情况和我们的预期不太一致.经过研究和学习,总算搞清楚了其中的关系.简单总结如下: 只有Positione ...

  9. CSS基础:层叠顺序和层叠上下文

    简介 在考虑到两个元素可能重叠的情况下,层叠顺序决定了那个元素在前面,那个元素在后面,这是针对普通元素而言.而层叠上下文和块级格式化上下文 (BFC) 一样,基本上也是由一些 CSS 属性创建的,它单 ...

随机推荐

  1. D-多连块拼图

    多连块是指由多个等大正方形边与边连接而成的平面连通图形. – 维基百科 给一个大多连块和小多连块,你的任务是判断大多连块是否可以由两个这样的小多连块拼成.小多连块只能平移,不能旋转或者翻转.两个小多连 ...

  2. P2586 [ZJOI2008]杀蚂蚁

    传送门 快乐模拟,修身养性 代码长度其实还好,主要是细节多 只要知道一些计算几何基础知识即可快乐模拟,按着题目要求一步步实现就行啦 注意仔细读题,蚂蚁每 $5$ 秒乱走一次的时候是只要能走就走了,不一 ...

  3. 内存分析工具MAT(Memory Analyzer Tool)从安装到使用

    一.安装 首先,你得有一个Eclipse(因为MAT是Eclipse的插件) 然后,你要在Eclipse上安装MAT,步骤如下: 1.点击Help,Install New Soft,就出现了以下Ins ...

  4. JavaEE高级-JPA学习笔记

    *JPA概述 *JPA是什么? - Java Persistence API :用于对象持久化的API - Java EE 5.0平台标准的ORM规范,使得应用程序以统一的方式访问持久化层 - JPA ...

  5. 使nginx归于systemd管理

    [root@centos7 ~]# vim /usr/lib/systemd/system/nginx.service [Unit] Description=The Nginx HTTP Server ...

  6. Keycode含义

    keycode 是键盘上每一个按键对应的码keycode如下 :keycode 0 = keycode 1 = keycode 2 = keycode 3 = keycode 4 = keycode ...

  7. Java并发——原子变量和原子操作

    很多情况下我们只是需要一个简单的.高效的.线程安全的递增递减方案.注意,这里有三个条件:简单,意味着程序员尽可能少的操作底层或者实现起来要比较容易:高效意味着耗用资源要少,程序处理速度要快:线程安全也 ...

  8. N^2取N

    序列合并 有两个长度都是N的序列A和B,在A和B中各取一个数相加可以得到N^2个和,求这N^2个和中最小的N个. 先把A B排序 然后pushA[1]+B[i](1<=i<=n)每次取出一 ...

  9. STL的容器哈希表

    C++ STL中,哈希表对应的容器是 unordered_map(since C++ 11).根据 C++ 11 标准的推荐,用 unordered_map 代替 hash_map. 与Map的区别 ...

  10. 【串线篇】spring boot嵌入式Servlet容器自动配置原理

    EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置? @AutoConfigureOrder(Ordered.HIGHEST_PREC ...