Jumat, 30 Oktober 2015

Download Backup Database Mysql Menggunakan PHP

Langsung aja gak pake basa basi, script di bawah ini di gunakan untuk backup database menggunakan PHP, filanya bisa langsung di download atau di save di hosting juga bisa.
<?php
error_reporting(E_ALL);

/* Define database parameters here */
define("DB_USER", 'root');
define("DB_PASSWORD", '');
define("DB_NAME", 'kwitansi');
define("DB_HOST", 'localhost');
define("OUTPUT_DIR", 'dbBackup'); // Folder / Directory Name
define("TABLES", '*');

/* Instantiate Backup_Database and perform backup */
$backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
//echo "Backup result: " . $status . " - By Asefur Mukti";
//echo '<a href="'.$backupDatabase->filename.'">Download</a>';
/* The Backup_Database class */

class Backup_Database {
/* Host where database is located  */

  var $host = '';
  var $username = '';
  var $passwd = '';
  var $dbName = '';
  var $charset = '';

  /* Constructor initializes database */

  function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8') {
    $this->host = $host;
    $this->username = $username;
    $this->passwd = $passwd;
    $this->dbName = $dbName;
    $this->charset = $charset;
    $this->initializeDatabase();
  }

  protected function initializeDatabase() {
    $conn = @mysql_connect($this->host, $this->username, $this->passwd); // Ik Added @ to Hide PDO Error Message
    mysql_select_db($this->dbName, $conn);
    if (!mysql_set_charset($this->charset, $conn)) {
      mysql_query('SET NAMES ' . $this->charset);
    }
  }

  /* Backup the whole database or just some tables Use '*' for whole database or 'table1 table2 table3...' @param string $tables  */

  public function backupTables($tables = '*', $outputDir = '.') {
    try {
      /* Tables to export  */
      if ($tables == '*') {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while ($row = mysql_fetch_row($result)) {
          $tables[] = $row[0];
        }
      } else {
        $tables = is_array($tables) ? $tables : explode(',', $tables);
      }

      $sql = 'CREATE DATABASE IF NOT EXISTS ' . $this->dbName . ";\n\n";
      $sql .= 'USE ' . $this->dbName . ";\n\n";

  /* Iterate tables */
  foreach ($tables as $table) {
    //echo "Backing up " . $table . " table...";

    $result = mysql_query('SELECT * FROM ' . $table);
 
    $numFields = mysql_num_fields($result);

    $sql .= 'DROP TABLE IF EXISTS ' . $table . ';';
    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE ' . $table));
    $sql.= "\n\n" . $row2[1] . ";\n\n";

    for ($i = 0; $i < $numFields; $i++) {
      while ($row = mysql_fetch_row($result)) {
        $sql .= 'INSERT INTO ' . $table . ' VALUES(';
        for ($j = 0; $j < $numFields; $j++) {
          $row[$j] = addslashes($row[$j]);
          // $row[$j] = ereg_replace("\n", "\\n", $row[$j]);
          if (isset($row[$j])) {
            $sql .= '"' . $row[$j] . '"';
          } else {
            $sql.= '""';
          }
          if ($j < ($numFields - 1)) {
            $sql .= ',';
          }
        }
        $sql.= ");\n";
      }
    }
    $sql.="\n\n\n";
    //echo " OK <br/><br/>" . "";
  }
} catch (Exception $e) {
  //var_dump($e->getMessage());
  return false;
 }

    return $this->saveFile($sql, $outputDir);
  }

  /* Save SQL to file @param string $sql */

  protected function saveFile(&$sql, $outputDir = '.') {
    if (!$sql)
      return false;

    try {
   $this->filename = 'db-backup-' . $this->dbName . '-' . date("Ymd-His", time()) . '.sql'; 
      //$handle  = fopen($this->filename, 'w+'); //UNTUK MEMBUAT FILE
      //fwrite($handle, $sql);     //SETELAH DI BUAT LALU DI TULIS KE DALAM FILE
   header("Content-type: application/octet-stream");
   header('Content-Disposition: attachment; filename='.$this->filename);
   echo $sql;
      //fclose($handle);       //LALU FILE DI TUTUP
    } catch (Exception $e) {
      //var_dump($e->getMessage());    //TAMPILKAN PESAN
      return false;
    }
    return true;
  }

}
?>

Tidak ada komentar:

Posting Komentar