Foros del Web » Programando para Internet » PHP »

Backup en php

Estas en el tema de Backup en php en el foro de PHP en Foros del Web. Amigos como estan mi duda esta siguiente tengo una base de datos en mysql y un panel administrador la idea es que exista una opcion ...
  #1 (permalink)  
Antiguo 14/04/2010, 10:03
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 2 meses
Puntos: 0
Pregunta Backup en php

Amigos como estan mi duda esta siguiente tengo una base de datos en mysql y un panel administrador la idea es que exista una opcion de diga backup y el mismo administrador pueda hacer esa accion es posible hacerlo
De ser asi por favor me podrian ayudar o como se debe hacer ???
  #2 (permalink)  
Antiguo 14/04/2010, 10:05
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Backup en php

Busca en el area de aportes, un tema llamado yoDumpeo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 14/04/2010, 10:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Backup en php

Gracias abimaelrc pero es normal que me salga esto es normal:


ATENCION: Probablemente ha ocurrido un error

# +================================================= ==================
# | YoDumpeo! 1.1b
# | por fran86
# |
# | Generado el 14-04-2010 a las 01:04:59 PM por el usurio 'root'
# | Servidor: localhost
# | MySQL Version: 5.0.51a
# | PHP Version: 5.2.5
# | Base de datos: 'bd_asociacion'
# | Tablas: [0] => archivos; [1] => comentarios; [2] => delegado; [3] => equipos; [4] => jugadores; [5] => noticia; [6] => programacion; [7] => tribunal; [8] => usuario
# |
# +----------


Tengo un link que dice backup y lo llamo de esta manera (http://localhost/proyecto_cisco/inde...p&pag=backup)y coloque la opcion gz pero en mi base de datos en el link de exportar aparecen las opciones de gzip, zip o ninguna como puedo arreglar esto creo q es por la versiones de mysql o que es ??

Este es mi codigo de PHP de configuracion.
Código PHP:
Ver original
  1. <?php
  2. /* Usuario para la conexion a Mysql. */
  3. $usurio = "root";
  4. /* Password para la conexion a Mysql. */
  5. $passwd = "";
  6.  /* Host para la conexion a Mysql. */
  7. $host = "localhost";
  8. /* Base de Datos que se seleccionará. */
  9. $bd = "bd_asociacion";
  10. /* Nombre del fichero que se descargará. */
  11. $nombre = "dump.txt";
  12. /* Determina si la tabla será vaciada (si existe) cuando  restauremos la tabla. */            
  13. $drop = false;
  14. /*
  15. * Array que contiene las tablas de la base de datos que seran resguardadas.
  16. * Puede especificarse un valor false para resguardar todas las tablas
  17. * de la base de datos especificada en  $bd.
  18. *
  19. * Ejs.:
  20. * $tablas = false;
  21. *    o
  22. * $tablas = array("tabla1", "tabla2", "tablaetc");
  23. *
  24. */
  25. $tablas = false;
  26. /*
  27. * Tipo de compresion.
  28. * Puede ser "gz", "bz2", o false (sin comprimir)
  29. */
  30. $compresion = "gz";
  31.  
  32. /* Conexion y eso*/
  33. $conexion = mysql_connect($host, $usurio, $passwd)
  34. or die("No se conectar con el servidor MySQL: ".mysql_error());
  35. mysql_select_db($bd, $conexion)
  36. or die("No se pudo seleccionar la Base de Datos: ". mysql_error());
  37.  
  38.  
  39. /* Se busca las tablas en la base de datos */
  40. if ( empty($tablas) ) {
  41.     $consulta = "SHOW TABLES FROM $bd;";
  42.     $respuesta = mysql_query($consulta, $conexion)
  43.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  44.     while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
  45.         $tablas[] = $fila[0];
  46.     }
  47. }
  48.  
  49.  
  50. /* Se crea la cabecera del archivo */
  51. $info['dumpversion'] = "1.1b";
  52. $info['fecha'] = date("d-m-Y");
  53. $info['hora'] = date("h:m:s A");
  54. $info['mysqlver'] = mysql_get_server_info();
  55. $info['phpver'] = phpversion();
  56. print_r($tablas);
  57. $representacion = ob_get_contents();
  58. preg_match_all('/(\[\d+\] => .*)\n/', $representacion, $matches);
  59. $info['tablas'] = implode(";  ", $matches[1]);
  60. $dump = <<<EOT
  61. # +===================================================================
  62. # | YoDumpeo! {$info['dumpversion']}
  63. # | por fran86 <[email protected]>
  64. # |
  65. # | Generado el {$info['fecha']} a las {$info['hora']} por el usurio '$usurio'
  66. # | Servidor: {$_SERVER['HTTP_HOST']}
  67. # | MySQL Version: {$info['mysqlver']}
  68. # | PHP Version: {$info['phpver']}
  69. # | Base de datos: '$bd'
  70. # | Tablas: {$info['tablas']}
  71. # |
  72. # +-------------------------------------------------------------------
  73.  
  74. EOT;
  75. foreach ($tablas as $tabla) {
  76.    
  77.     $drop_table_query = "";
  78.     $create_table_query = "";
  79.     $insert_into_query = "";
  80.    
  81.     /* Se halla el query que será capaz vaciar la tabla. */
  82.     if ($drop) {
  83.         $drop_table_query = "DROP TABLE IF EXISTS `$tabla`;";
  84.     } else {
  85.         $drop_table_query = "# No especificado.";
  86.     }
  87.  
  88.     /* Se halla el query que será capaz de recrear la estructura de la tabla. */
  89.     $create_table_query = "";
  90.     $consulta = "SHOW CREATE TABLE $tabla;";
  91.     $respuesta = mysql_query($consulta, $conexion)
  92.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  93.     while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
  94.             $create_table_query = $fila[1].";";
  95.     }
  96.    
  97.     /* Se halla el query que será capaz de insertar los datos. */
  98.     $insert_into_query = "";
  99.     $consulta = "SELECT * FROM $tabla;";
  100.     $respuesta = mysql_query($consulta, $conexion)
  101.     or die("No se pudo ejecutar la consulta: ".mysql_error());
  102.     while ($fila = mysql_fetch_array($respuesta, MYSQL_ASSOC)) {
  103.             $columnas = array_keys($fila);
  104.             foreach ($columnas as $columna) {
  105.                 if ( gettype($fila[$columna]) == "NULL" ) {
  106.                     $values[] = "NULL";
  107.                 } else {
  108.                     $values[] = "'".mysql_real_escape_string($fila[$columna])."'";
  109.                 }
  110.             }
  111.             $insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", ", $values).");\n";
  112.             unset($values);
  113.     }
  114.    
  115. $dump .= <<<EOT
  116.  
  117. # | Vaciado de tabla '$tabla'
  118. # +------------------------------------->
  119. $drop_table_query
  120.  
  121.  
  122. # | Estructura de la tabla '$tabla'
  123. # +------------------------------------->
  124. $create_table_query
  125.  
  126.  
  127. # | Carga de datos de la tabla '$tabla'
  128. # +------------------------------------->
  129. $insert_into_query
  130.  
  131. EOT;
  132. }
  133.  
  134. /* Envio */
  135. if ( !headers_sent() ) {
  136.     header("Pragma: no-cache");
  137.     header("Expires: 0");
  138.     header("Content-Transfer-Encoding: binary");
  139.     switch ($compresion) {
  140.     case "gz":
  141.         header("Content-Disposition: attachment; filename=$nombre.gz");
  142.         header("Content-type: application/x-gzip");
  143.         echo gzencode($dump, 9);
  144.         break;
  145.     case "bz2":
  146.         header("Content-Disposition: attachment; filename=$nombre.bz2");
  147.         header("Content-type: application/x-bzip2");
  148.         echo bzcompress($dump, 9);
  149.         break;
  150.     default:
  151.         header("Content-Disposition: attachment; filename=$nombre");
  152.         header("Content-type: application/force-download");
  153.         echo $dump;
  154.     }
  155. } else {
  156.     echo "<b>ATENCION: Probablemente ha ocurrido un error</b><br />\n<pre>\n$dump\n</pre>";
  157. }
  158. ?>

Última edición por vili86; 14/04/2010 a las 10:52 Razón: Me falto codigo
  #4 (permalink)  
Antiguo 14/04/2010, 10:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Backup en php

El código cuando lo probé hace un tiempo, tiene un error, te sugiero que analices el código y leas lo que indica el error. Nos dejas saber.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 14/04/2010, 11:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Backup en php

Me sale ese error pero mas abajo me aparecen todas mis tablas y lo que inserte en ellas eso de analizar el error pienso que es en esta parte del codigo.
Código PHP:
Ver original
  1. switch ($compresion) {
  2.     case "gz":
  3.         header("Content-Disposition: attachment; filename=$nombre.gz");
  4.         header("Content-type: application/x-gzip");
  5.         echo gzencode($dump, 9);
  6.         break;
  7.     case "bz2":
  8.         header("Content-Disposition: attachment; filename=$nombre.bz2");
  9.         header("Content-type: application/x-bzip2");
  10.         echo bzcompress($dump, 9);
  11.         break;
  12.     default:
  13.         header("Content-Disposition: attachment; filename=$nombre");
  14.         header("Content-type: application/force-download");
  15.         echo $dump;

Ya q en la bd solo existe las opciones de gzip, zip o ninguna ??? te agradeceria mucho si me dijeras donde encuentras tu el error
  #6 (permalink)  
Antiguo 14/04/2010, 11:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Backup en php

Ok, pero no es un error que te indica el código, sino que ¿tu no quieres que salga la información? Me perdí en lo que quieres hacer entonces.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 14/04/2010, 11:53
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Backup en php

Muchas gracias abimaelrc mira hice esto: suprimi gran parte del cogido de aporte y me salio como resultado este:
Código PHP:
Ver original
  1. $db_host = "localhost";
  2. $db_name = "XX_XXXX";
  3. $db_user = "XXXX";
  4. $db_pass = "XXXX";
  5. mysql_connect($db_host,$db_user,$db_pass);
  6. mysql_select_db($db_name) or die("Unable to select database.");
  7. function datadump ($table) {
  8.     $result .= "# Dump of ".$table." \n";
  9.     $result .= "# Dump DATE : " . date("d-M-Y") ."\n\n";
  10.     $query = mysql_query("select * from ".$table);
  11.     $num_fields = @mysql_num_fields($query);
  12.     $numrow = mysql_num_rows($query);
  13.     while($row=mysql_fetch_array($query)) {
  14.   $result .= "INSERT INTO ".$table." VALUES(";
  15.     for($j=0; $j<$num_fields; $j++) {
  16.     $row[$j] = addslashes($row[$j]);
  17.     $row[$j] = ereg_replace("\n","\\n",$row[$j]);
  18.     if (isset($row[$j])) $result .= "\"$row[$j]\"" ; else $result .= "\"\"";
  19.     if ($j<($num_fields-1)) $result .= ",";
  20.    }    
  21.       $result .= ");\n";
  22.      }
  23.      return $result . "\n\n\n";
  24.   }
  25.  $qry2=mysql_list_tables($db_name);
  26.  $tot_tablas=mysql_num_rows($qry2);
  27.  for($i=0;$i<$tot_tablas;$i++){
  28.  $nombre_tabla=mysql_tablename($qry2,$i);
  29.  $content.=datadump($nombre_tabla);
  30.  }
  31. $file_name = "MySQL_Database_Backup.sql";
  32. header( "Content-Type: application/octet-stream");
  33. header( "Content-Disposition: attachment; filename=".$file_name."");
  34. echo $content;

Entendi mucho mejor y leei un poco mas lo unico que me falta ahora es como puedo hacer para q al momento de descargar mi bs lo pueda hacer en zip o gzip por lo demas funciona pero me gustaria que me dieras alguna orientacion por favor en esa parte de exportar a formatos comprimiedos.????
  #8 (permalink)  
Antiguo 14/04/2010, 13:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Backup en php

Para ello tienes que declarar sus respectivas cabeceras
Código PHP:
Ver original
  1. header("Content-Disposition: attachment; filename=$nombre.gz");
  2. header("Content-type: application/x-gzip");
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: backup
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 12:17.