2014-03-31 26 views
0

我有一個數據庫備份類,但沒有選項來添加PORT功能來保存遠程數據庫的備份。目前該腳本在默認端口下工作正常。任何人都可以幫助我在這個腳本中添加PORT功能嗎?mysql數據庫備份類 - 幫我添加PORT功能

$host = $_POST['dbhost']; 
$user = $_POST['dbuser']; 
$password = $_POST['dbpass']; 
$databaseName = $_POST['dbname']; 
$path = "$savepath"; // Put the complete path here -- /home/user/database.sql for example 

// Report all errors 
error_reporting(E_ALL); 

/** 
* Define database parameters here 
*/ 
define("DB_HOST", $host); 
define("DB_USER", $user); 
define("DB_PASSWORD", $password); 
define("DB_NAME", $databaseName); 
define("OUTPUT_DIR", $path); 
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 "<br /><br /><br />Backup result: ".$status; 
header('Location: index.php'); 
/** 
* The Backup_Database class 
*/ 
class Backup_Database { 
    /** 
    * Host where database is located 
    */ 
    var $host = ""; 

    /** 
    * Username used to connect to database 
    */ 
    var $username = ""; 

    /** 
    * Password used to connect to database 
    */ 
    var $passwd = ""; 

    /** 
    * Database to backup 
    */ 
    var $dbName = ""; 

    /** 
    * Database charset 
    */ 
    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); 
     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] = str_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 />"; 
      } 
     } 
     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 
     { 
      $handle = fopen($outputDir.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+'); 
      fwrite($handle, $sql); 
      fclose($handle); 
     } 
     catch (Exception $e) 
     { 
      var_dump($e->getMessage()); 
      return false; 
     } 

     return true; 
    } 
} 
+0

您是否找到這門課程,或者您是自己編寫的? – Micah

+0

我發現這個班@Micah,你能幫忙嗎? – Sahed

+0

簡單。用mysqli重寫你的類,然後用'mysqli :: __ construct'連接你的數據庫服務器。儘管如此,你應該這樣做,因爲mysql擴展在PHP 5.5.0以前不推薦使用,並且將來會被刪除。 – Bjoern

回答