Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/05/2009, 11:26
danieltv2002
 
Fecha de Ingreso: marzo-2008
Mensajes: 30
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo respaldar base de datos grande mysql con php

Que tal modifique el scrip publicado por fran86



para que diera mas opcciones, primeramente un formulario para acceder a respaldar tablas especificas, o la opccion de todas; ademas de poder asignarle el nombre, version de respaldo y si se quiere comprimido o no.

todo trabaja muy bien a exepccion que si selecciono el formulario que me lo de en formato comprimido este no lo puedo abrir, me dice que el archivo esta da#ado, intente con WinRar y 7zip, haber si alguien me puede decir si hay algun error en el codigo para comprimir.

La salida sin comprimir da bien el resultado.

este es el codigo:
Cita:
<?
session_start(); //iniciamos la secion.

//si no hay cookies presentes, redireccionamos al usuario
if(!isset($_SESSION['user'])){
header ("location: ../logout.php");
exit(); //interrumpimos el scrip
}

if (isset($_POST['submit'])){
//Valores obtenidos del formulario
$borrar=$_POST['b']; //borrar
$t=$_POST['t']; //tablas
$c=$_POST['c']; // compresion
$v=$_POST['v']; // version
$co=$_POST['co']; // comentario
$n=$_POST['n']; // nombre

require_once ('../../mysql_connect.php');

// Nombre del fichero que se descargará. */
if ($n==NULL){
$nombre = "Respaldo.txt";
} else {
$nombre = "$n".".txt";
}
// Determina si la tabla será vaciada (si existe) cuando restauremos la tabla. */
if ($borrar==0){
$drop = false;
} elseif ($borrar==1){
$drop = true;
}
/*
* Array que contiene las tablas de la base de datos que seran resguardadas.
* Puede especificarse un valor false para resguardar todas las tablas
* de la base de datos especificada en $bd.
*
* Ejs.:
* $tablas = false;
* o
* $tablas = array("tabla1", "tabla2", "tablaetc");
*
*/
if ($t==0){
$tablas = false;
} elseif ($t==1){
$tablas = array ("tabla1", "tabla2", "tabla3");
} elseif ($t==2){
$tablas = array ("tabla1");
} elseif ($t==3){
$tablas = array ( "tabla2");
} elseif ($t==4){
$tablas = array ("tabla3");
}

/*
* Tipo de compresion.
* Puede ser "gz", "bz2", o false (sin comprimir)
*/
if ($c==0){
$compresion = false; //sin comprimir
} elseif ($c==1){
$compresion = "gz";
} elseif ($c==2){
$compresion = "bz2";
}


/* Se busca las tablas en la base de datos */
if ( empty($tablas) ) {
$consulta = "SHOW TABLES FROM $bd;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
$tablas[] = $fila[0];
}
}


/* Se crea la cabecera del archivo */

$info['dumpversion'] = "$v";
$info ['comentario'] = "$co";

$info['fecha'] = date("d-m-Y");
$info['hora'] = date("h:m:s A");
$info['mysqlver'] = mysql_get_server_info();
$info['phpver'] = phpversion();
ob_start();
print_r($tablas);
$representacion = ob_get_contents();
ob_end_clean ();
preg_match_all('/(\[\d+\] => .*)\n/', $representacion, $matches);
$info['tablas'] = implode("; ", $matches[1]);
$dump = <<<EOT
# +================================================= ==================
# | YoDumpeo! {$info['dumpversion']}
# | por fran86 <[email protected]>
# |
# | Generado el {$info['fecha']} a las {$info['hora']}
# | comentario adiccional: {$info['comentario']}
# | Servidor: {$_SERVER['HTTP_HOST']}
# | MySQL Version: {$info['mysqlver']}
# | PHP Version: {$info['phpver']}
# | Base de datos: '$bd'
# | Tablas: {$info['tablas']}
# |
# +-------------------------------------------------------------------

EOT;
foreach ($tablas as $tabla) {

$drop_table_query = "";
$create_table_query = "";
$insert_into_query = "";

/* Se halla el query que será capaz vaciar la tabla. */
if ($drop) {
$drop_table_query = "DROP TABLE IF EXISTS `$tabla`;";
} else {
$drop_table_query = "# No especificado.";
}

/* Se halla el query que será capaz de recrear la estructura de la tabla. */
$create_table_query = "";
$consulta = "SHOW CREATE TABLE $tabla;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
$create_table_query = $fila[1].";";
}

/* Se halla el query que será capaz de insertar los datos. */
$insert_into_query = "";
$consulta = "SELECT * FROM $tabla;";
$respuesta = mysql_query($consulta);
while ($fila = mysql_fetch_array($respuesta, MYSQL_ASSOC)) {
$columnas = array_keys($fila);
foreach ($columnas as $columna) {
if ( gettype($fila[$columna]) == "NULL" ) {
$values[] = "NULL";
} else {
$values[] = "'".mysql_real_escape_string($fila[$columna])."'";
}
}
$insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", ", $values).");\n";
unset($values);
}

$dump .= <<<EOT

# | Vaciado de tabla '$tabla'
# +------------------------------------->
$drop_table_query


# | Estructura de la tabla '$tabla'
# +------------------------------------->
$create_table_query


# | Carga de datos de la tabla '$tabla'
# +------------------------------------->
$insert_into_query

EOT;
}

/* Envio */
if ( !headers_sent() ) {
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
switch ($compresion) {
case "gz":
header("Content-Disposition: attachment; filename=$nombre.gz");
header("Content-type: application/x-gzip");
echo gzencode($dump, 9);
break;
case "bz2":
header("Content-Disposition: attachment; filename=$nombre.bz2");
header("Content-type: application/x-bzip2");
echo bzcompress($dump, 9);
break;
default:
header("Content-Disposition: attachment; filename=$nombre");
header("Content-type: application/force-download");
echo $dump;
}
} else {
echo "<b>ATENCION: Probablemente ha ocurrido un error</b><br />\n<pre>\n$dump\n</pre>";
}

mysql_close();
} else {
?>
<style type="text/css">
<!--
.Estilo1 {font-size: x-small}
.Estilo2 {color: #0000FF}
-->
</style>


<link href="estilos annclass.css" rel="stylesheet" type="text/css" />
<h1 align="center" class="Estilo2">Formulario para respaldar base de datos</h1>
<form name="form01" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table width="900" align="center">
<tr>
<td width="442"><div align="right">Seleccione las tablas a respaldar</div></td>
<td width="446">
<select name="t">
<option value="0">Todos </option>
<option value="1">Solo las principales</option>
<option value="2">Temporal</option>
<option value="3">La de cierre</option>
<option value="4">Por autorizar</option>
</select></td>
</tr>
<tr>
<td><div align="right">Seleccione si desea algun tipo de compresion</div></td>
<td><select name="c">
<option value="0">Ninguna</option>
<option value="1">gz</option>
<option value="2">vg2</option>
</select></td>
</tr>
<tr>
<td><div align="right">Version del respaldo</div></td>
<td><input type="text" name="v" maxlength="20" size="20" /></td>
</tr>
<tr>
<td><div align="right" class="Estilo2">Nombre del archivo</div></td>
<td><input type="text" name="n" size="20" maxlength="20" />
<span class="Estilo1">Sin espacios</span></td>
</tr>
<tr>
<td><div align="right">Comentario adiccional</div></td>
<td><input type="text" name="co" size="40" maxlength="40" /></td>
</tr>
<tr>
<td><div align="right">Desea borrar las tablas despues de respaldarlas?</div></td>
<td><select name="b">
<option value="0">No</option>
<option value="1">Si</option>
</select></td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" value="Respaldar" name="submit" />
</div></td>
</tr>
</table>
</form>
<?
}

?>