Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.24 KB | None | 0 0
  1. error_reporting(E_ALL);
  2.  
  3. ini_set('display_errors', true);
  4.  
  5. ini_set('error_reporting',  E_ALL);
  6.  
  7.  
  8. $dbhost = 'mysql60.1gb.ru:3036';
  9. $dbuser = 'gb_x_mirvody';
  10. $dbpass = 'd7b1a7d5';
  11. $dbname = 'gb_x_mirvody';
  12.  
  13. // Report all errors
  14. //error_reporting(E_ALL);
  15.  
  16. /**
  17.  * Define database parameters here
  18.  */
  19. define("DB_USER", 'gb_x_mirvody');
  20. define("DB_PASSWORD", 'd7b1a7d5');
  21. define("DB_NAME", 'gb_x_mirvody');
  22. define("DB_HOST", 'mysql60.1gb.ru');
  23. define("OUTPUT_DIR", 'cache');
  24. define("TABLES", '*');
  25.  
  26. /**
  27.  * Instantiate Backup_Database and perform backup
  28.  */
  29. $backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  30. $status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
  31. echo "<br /><br /><br />Backup result: ".$status;
  32.  
  33. /**
  34.  * The Backup_Database class
  35.  */
  36. class Backup_Database {
  37.     /**
  38.      * Host where database is located
  39.      */
  40.     var $host = '';
  41.  
  42.     /**
  43.      * Username used to connect to database
  44.      */
  45.     var $username = '';
  46.  
  47.     /**
  48.      * Password used to connect to database
  49.      */
  50.     var $passwd = '';
  51.  
  52.     /**
  53.      * Database to backup
  54.      */
  55.     var $dbName = '';
  56.  
  57.     /**
  58.      * Database charset
  59.      */
  60.     var $charset = '';
  61.  
  62.     /**
  63.      * Constructor initializes database
  64.      */
  65.     function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8')
  66.     {
  67.         $this->host     = $host;
  68.         $this->username = $username;
  69.         $this->passwd   = $passwd;
  70.         $this->dbName   = $dbName;
  71.         $this->charset  = $charset;
  72.  
  73.         $this->initializeDatabase();
  74.     }
  75.  
  76.     protected function initializeDatabase()
  77.     {
  78.         $conn = mysql_connect($this->host, $this->username, $this->passwd);
  79.         if (!$conn) {
  80.             die('Ошибка соединения: ' . mysql_error());
  81.         }else{
  82.             //die('good');
  83.         }
  84.  
  85.         mysql_select_db($this->dbName, $conn);
  86.         if (! mysql_set_charset ($this->charset, $conn))
  87.         {
  88.             mysql_query('SET NAMES '.$this->charset);
  89.         }
  90.     }
  91.  
  92.     /**
  93.      * Backup the whole database or just some tables
  94.      * Use '*' for whole database or 'table1 table2 table3...'
  95.      * @param string $tables
  96.      */
  97.     public function backupTables($tables = '*', $outputDir = '.')
  98.     {
  99.         try
  100.         {
  101.             /**
  102.              * Tables to export
  103.              */
  104.             if($tables == '*')
  105.             {
  106.                 $tables = array();
  107.                 $result = mysql_query('SHOW TABLES');
  108.                 while($row = mysql_fetch_row($result))
  109.                 {
  110.                     $tables[] = $row[0];
  111.                 }
  112.             }
  113.             else
  114.             {
  115.                 $tables = is_array($tables) ? $tables : explode(',',$tables);
  116.             }
  117.  
  118.             $sql = 'CREATE DATABASE IF NOT EXISTS '.$this->dbName.";\n\n";
  119.             $sql .= 'USE '.$this->dbName.";\n\n";
  120.  
  121.             /**
  122.              * Iterate tables
  123.              */
  124.             foreach($tables as $table)
  125.             {
  126.                 echo "Backing up ".$table." table...";
  127.  
  128.                 $result = mysql_query('SELECT * FROM '.$table);
  129.                 $numFields = mysql_num_fields($result);
  130.  
  131.                 $sql .= 'DROP TABLE IF EXISTS '.$table.';';
  132.                 $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
  133.                 $sql.= "\n\n".$row2[1].";\n\n";
  134.  
  135.                 for ($i = 0; $i < $numFields; $i++)
  136.                 {
  137.                     while($row = mysql_fetch_row($result))
  138.                     {
  139.                         $sql .= 'INSERT INTO '.$table.' VALUES(';
  140.                         for($j=0; $j<$numFields; $j++)
  141.                         {
  142.                             $row[$j] = addslashes($row[$j]);
  143.                             $row[$j] = str_replace("\n","\\n",$row[$j]);
  144.                             if (isset($row[$j]))
  145.                             {
  146.                                 $sql .= '"'.$row[$j].'"' ;
  147.                             }
  148.                             else
  149.                             {
  150.                                 $sql.= '""';
  151.                             }
  152.  
  153.                             if ($j < ($numFields-1))
  154.                             {
  155.                                 $sql .= ',';
  156.                             }
  157.                         }
  158.  
  159.                         $sql.= ");\n";
  160.                     }
  161.                 }
  162.  
  163.                 $sql.="\n\n\n";
  164.  
  165.                 echo " OK" . "<br />";
  166.             }
  167.         }
  168.         catch (Exception $e)
  169.         {
  170.             var_dump($e->getMessage());
  171.             return false;
  172.         }
  173.  
  174.         return $this->saveFile($sql, $outputDir);
  175.     }
  176.  
  177.     /**
  178.      * Save SQL to file
  179.      * @param string $sql
  180.      */
  181.     protected function saveFile(&$sql, $outputDir = '.')
  182.     {
  183.         if (!$sql) return false;
  184.  
  185.         try
  186.         {
  187.             $handle = fopen($outputDir.'/db-backup-'.$this->dbName.'-'.date("Ymd-His", time()).'.sql','w+');
  188.             fwrite($handle, $sql);
  189.             fclose($handle);
  190.         }
  191.         catch (Exception $e)
  192.         {
  193.             var_dump($e->getMessage());
  194.             return false;
  195.         }
  196.  
  197.         return true;
  198.     }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement