Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Salva de db de mysql (archivo.sql)

Estas en el tema de Salva de db de mysql (archivo.sql) en el foro de PHP en Foros del Web. Hace un tiempo atras estuve buscando un PHP que me hiciera una salva de mi db de mysql, para que los clientes tuvieran la oportunidad ...
  #1 (permalink)  
Antiguo 04/04/2013, 10:23
 
Fecha de Ingreso: septiembre-2012
Ubicación: La Habana
Mensajes: 32
Antigüedad: 11 años, 7 meses
Puntos: 1
Pregunta Salva de db de mysql (archivo.sql)

Hace un tiempo atras estuve buscando un PHP que me hiciera una salva de mi db de mysql, para que los clientes tuvieran la oportunidad de salvar sus datos.

Aqui les dejo el codigo completo por si alguin lo necesita.
Debo aclarar el que el codigo inicial lo traje desde internet haciendo algunos arreglillos, para que en el servidor se guardara solo la ultima copia que el usuario realizara, ya que como el las guardara en algun dispositivo de almacenamiento y dicho fichero creado ssaliera con la fecha del dia en que la realizo


Código PHP:
Ver original
  1. <?php
  2.  
  3. //=================================================
  4. //=== AQUI BORRAMOS TODAS LAS SALVAS ANTERIORES ===
  5. //=================================================
  6.  
  7. array_map('unlink', glob("db/*.sql"));
  8.  
  9. //============================================
  10. //=== AQUI COMIENZA EL PROCESO DE LA SALVA ===
  11. //============================================
  12.  
  13. // Report all errors
  14.  
  15. //Define los parametro de la conexion y la db
  16. define("DB_USER", 'root');
  17. define("DB_PASSWORD", 'omega');
  18. define("DB_NAME", 'tenlibros');
  19. define("DB_HOST", 'localhost');
  20. define("OUTPUT_DIR", 'db');
  21. define("TABLES", '*');
  22.  
  23. /**
  24.  * Instantiate Backup_Database and perform backup
  25.  */
  26. $backupDatabase = new Backup_Database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
  27. $status = $backupDatabase->backupTables(TABLES, OUTPUT_DIR) ? 'OK' : 'KO';
  28. //////////echo "<br /><br /><br />Backup result: ".$status;
  29.  
  30. /**
  31.  * The Backup_Database class
  32.  */
  33. class Backup_Database {
  34.     /**
  35.      * Host where database is located
  36.      */
  37.     var $host = '';
  38.  
  39.     /**
  40.      * Username used to connect to database
  41.      */
  42.     var $username = '';
  43.  
  44.     /**
  45.      * Password used to connect to database
  46.      */
  47.     var $passwd = '';
  48.  
  49.     /**
  50.      * Database to backup
  51.      */
  52.     var $dbName = '';
  53.  
  54.     /**
  55.      * Database charset
  56.      */
  57.     var $charset = '';
  58.  
  59.     /**
  60.      * Constructor initializes database
  61.      */
  62.     function Backup_Database($host, $username, $passwd, $dbName, $charset = 'utf8')
  63.     {
  64.         $this->host     = $host;
  65.         $this->username = $username;
  66.         $this->passwd   = $passwd;
  67.         $this->dbName   = $dbName;
  68.         $this->charset  = $charset;
  69.  
  70.         $this->initializeDatabase();
  71.     }
  72.  
  73.     protected function initializeDatabase()
  74.     {
  75.         $conn = mysql_connect($this->host, $this->username, $this->passwd);
  76.         mysql_select_db($this->dbName, $conn);
  77.         if (! mysql_set_charset ($this->charset, $conn))
  78.         {
  79.             mysql_query('SET NAMES '.$this->charset);
  80.         }
  81.     }
  82.  
  83.     /**
  84.      * Backup the whole database or just some tables
  85.      * Use '*' for whole database or 'table1 table2 table3...'
  86.      * @param string $tables
  87.      */
  88.     public function backupTables($tables = '*', $outputDir = '.')
  89.     {
  90.         try
  91.         {
  92.             /**
  93.             * Tables to export
  94.             */
  95.             if($tables == '*')
  96.             {
  97.                 $tables = array();
  98.                 $result = mysql_query('SHOW TABLES');
  99.                 while($row = mysql_fetch_row($result))
  100.                 {
  101.                     $tables[] = $row[0];
  102.                 }
  103.             }
  104.             else
  105.             {
  106.                 $tables = is_array($tables) ? $tables : explode(',',$tables);
  107.             }
  108.  
  109.             $sql = 'CREATE DATABASE IF NOT EXISTS '.$this->dbName.";\n\n";
  110.             $sql .= 'USE '.$this->dbName.";\n\n";
  111.  
  112.             /**
  113.             * Iterate tables
  114.             */
  115.             foreach($tables as $table)
  116.             {
  117.                 //////////echo "Backing up ".$table." table...";
  118.  
  119.                 $result = mysql_query('SELECT * FROM '.$table);
  120.                 $numFields = mysql_num_fields($result);
  121.  
  122.                 $sql .= 'DROP TABLE IF EXISTS '.$table.';';
  123.                 $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
  124.                 $sql.= "\n\n".$row2[1].";\n\n";
  125.  
  126.                 for ($i = 0; $i < $numFields; $i++)
  127.                 {
  128.                     while($row = mysql_fetch_row($result))
  129.                     {
  130.                         $sql .= 'INSERT INTO '.$table.' VALUES(';
  131.                         for($j=0; $j<$numFields; $j++)
  132.                         {
  133.                             $row[$j] = addslashes($row[$j]);
  134.                             $row[$j] = ereg_replace("\n","\\n",$row[$j]);
  135.                             if (isset($row[$j]))
  136.                             {
  137.                                 $sql .= '"'.$row[$j].'"' ;
  138.                             }
  139.                             else
  140.                             {
  141.                                 $sql.= '""';
  142.                             }
  143.  
  144.                             if ($j < ($numFields-1))
  145.                             {
  146.                                 $sql .= ',';
  147.                             }
  148.                         }
  149.  
  150.                         $sql.= ");\n";
  151.                     }
  152.                 }
  153.  
  154.                 $sql.="\n\n\n";
  155.  
  156.                 //////////echo " OK" . "<br />";
  157.             }
  158.         }
  159.         catch (Exception $e)
  160.         {
  161.             var_dump($e->getMessage());
  162.             return false;
  163.         }
  164.  
  165.         return $this->saveFile($sql, $outputDir);
  166.     }
  167.  
  168.     //AQUI CONFIGURAMOS LOS PARAMETROS PARA LA SALVA DEL FICHERO
  169.     protected function saveFile(&$sql, $outputDir = '.')
  170.     {
  171.         if (!$sql) return false;
  172.  
  173.         try
  174.         {
  175.             //Aqui construimos el nombre con el que guardamos el fichero de salva
  176. //          $handle = fopen($outputDir.'/db-'.$this->dbName.'.sql','w+');
  177.             $handle = fopen($outputDir.'/db-'.$this->dbName.'-'.date("Ymd", time()).'.sql','w+');
  178.             fwrite($handle, $sql);
  179.             fclose($handle);
  180.         }
  181.         catch (Exception $e)
  182.         {
  183.             var_dump($e->getMessage());
  184.             return false;
  185.         }
  186.  
  187.         return true;
  188.     }
  189. }
  190.  
  191. //SOLO PARA SERVIDORES EN LINUX
  192. //Aqui le cambiamos los permisos del fichero
  193. //chmod("db/*.sql",  0777);
  194.  
  195. //============================================
  196. //=== AQUI COMIENZA EL PROCESO DE DESCARGA ===
  197. //============================================
  198.    
  199.     $nombre_archivo = "db-tenlibros-".date("Ymd").".sql" ;
  200.     $f = "db/$nombre_archivo";
  201.     header("Content-type: application/octet-stream");
  202.     header("Content-Disposition: attachment; filename=\"$f\"\n");
  203.     $fp=fopen("$f", "r");
  204.     fpassthru($fp);
  205.  
  206. ?>

Etiquetas: mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:08.