程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php進行簡單備份和恢復功能

php進行簡單備份和恢復功能

編輯:PHP綜合
<?php 
// ========================== 文件說明 ==========================//
// 進行簡單備份和恢復功能

/*
所謂備份功能就是指

1, 備份就是一個文件,沒有什麼其它的選項, 帶來的效果就是使用簡單
2, 沒有分卷功能,分卷在有些windows虛擬主機中,不能導入大於2M的文件
3, 不能備份單張表,只能全部備份,單張表在只更改一些程序功能是蠻好用的


我這裡的功能就是點備分就是備份一個文件,以日期為.sql文件
*/
header("content-type:text/html;charset=utf-8");
// --------------- 配置 -----------------
/*
$h='localhost'; //主機
$u='root'; //用戶名
$p=''; //密碼
$db='mall'; //數據庫名
*/
include('config.php');

$backup_dir = './static/sql/';  //保存目錄

// --------------- 程序  -----------------
//$c = db($h, $u, $p, $db); //新建連接
$c = db(DB_HOST, DB_USER, DB_PASS, DB_NAME); //新建連接

// Main
$action = strtolower(trim($_GET['action']));

// 功能
function db($h='localhost', $u='', $p='', $db=''){
    $c = mysql_connect($h, $u, $p) or die('連接服務器失敗.');
    mysql_select_db($db, $c) or dir('無法打開數據庫');
    mysql_query('SET NAMES GBK', $c);
    return $c;
}

//產生列表
if ($action == '') {    
    $h = opendir($backup_dir);
    echo "<ul>";
    while($f = readdir($h)){
    if (eregi("^[0-9]{8,8}([0-9a-z_]+)(\.sql)$", $f))
        echo "<li>$f <a href='db.php?action=remove&f=$f'>刪除</a> | <a href='db.php?action=restore&f=$f'>恢復</a></li>";
    }
    closedir($h);
    echo "<li>$f <a href='db.php?action=backup'>新建備份</a>";
    echo "</ul>";
    
}

//刪除
if ($action == 'remove'){
    $f = $_GET['f'];
    if (!empty($f)) {
        unlink($backup_dir.$f);
        echo "刪除成功";
        echo "<a href=db.php>返回</a>";
    }
}


//恢復
if ($action == 'restore'){
    $f = $_GET['f'];
    if (!empty($f)) {
        //導入數據
        $fa = $backup_dir.$f;

        $sqls = file($fa);
        foreach($sqls as $sql) {
            $sql = str_replace("\r","",$sql);
            $sql = str_replace("\n","",$sql);
            mysql_query($sql, $c);
        }

        echo "導入成功<a href=db.php>返回</a>";
        
    }
}

//備份
if ($action == 'backup') {
    $q = mysql_query("SHOW TABLE STATUS", $c) or die("讀數據庫結構錯誤");
    //建成sql
    $sql=""; //清空sql
    while($r = mysql_fetch_array($q, MYSQL_ASSOC)) {
        //產生表頭
        $sql .= "DROP TABLE IF EXISTS ".$r['Name']."\n";
        $q1 = mysql_query("SHOW CREATE TABLE ".$r['Name'], $c);
        $q2 = mysql_fetch_row($q1);
        $sql .= preg_replace("/\n/", "", $q2[1]) ."\n";

        //產生表內容
        $q3 = mysql_query("SELECT * FROM {$r['Name']}", $c);
        $nf = mysql_num_fields($q3);
        while($r2=mysql_fetch_array($q3, MYSQL_NUM)) { //產生數字段格式的數組
            $comma = "";
            $sql.="INSERT INTO ".$r['Name']." VALUES(";
            for ($i=0; $i<$nf; $i++) {
                $sql .= $comma."'".mysql_escape_string($r2[$i])."'";
                //$sql .= $comma."'".addslashes($r2[$i])."'";
                $comma = ",";
            }
            $sql .= ")\n";
        }   
    }

    //寫入文件
    $fa = date("Ymd", time())."_all.sql";
    $fp = fopen($backup_dir.$fa, 'w+') or die("Failed to open target file");
    fwrite($fp, $sql) or die ("failed to write file");
    fclose($fp);
    echo "備份完成,生成備份文件'$fa'";
    echo "<a href=db.php>返回</a>";
}

mysql_close($c); //關閉連接
?>
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved