Gracias otra vez por la respuesta Marvin.
Veamos. La función que contiene el código para generar el archivo es una función xajax, por el tema de llamarla con un botón desde otra función xajax. No sé si eso será correcto o es lo que me está fallando.
Pulso el botón de generar y no hace nada. Absolutamente nada, ni me da error.
Puede ser por lo que digo anteriormente o porque no se especifica dónde guardar el archivo.
Os paso algo de código para que veais lo que he hecho
Código PHP:
//este es el botón del menú que invoca a la primera función
<div id='copia_seguridad' class='bot_izqd'>
<a href='#' onclick='xajax_eliminaTabla(); xajax_creaCopiaS(); '>Copia de Seguridad</a>
</div>
//la función que aparece en pantalla cuando pulso el botón del menú
function creaCopiaS()
{
$respuesta = new xajaxResponse();
$salida .= "<div id='divcreacs'>
<form name='fCopia' id='fCopia' action='#' value=''>
<table id='tcopia' class='form'>
<thead>
<tr>
<th>Copia de Seguridad</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan='2'> </th>
</tr>
<tr>
<th colspan='2'>¿Estás seguro de que deseas hacer una copia de seguridad de la base de datos?</th>
</tr>
<tr>
<td colspan='2'><input type='button' id='bcreacopia' name='bcreacopia' value='Aceptar' onclick='xajax_copiaBD()'/></td>
</tr>
</tbody>
</table>
</form>
</div>";
//la función adaptada que copié del enlace
function copiaBD()
{
$conexion = conectar();
$date_month = date('m');
$date_year = date('Y');
$date_day = date('d');
$Date = "$date_year-$date_month-$date_day";
$nombre = "copiabd_$Date.sql";
$drop = false;
$tablas = false;
$compresion = "gz";
/* Se busca las tablas en la base de datos */
if ( empty($tablas) )
{
$consulta = "SHOW TABLES FROM ilscnse;";
$respuesta = mysql_query($consulta, $conexion) or die("No se pudo ejecutar la consulta: ".mysql_error());
while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM))
{
$tablas[] = $fila[0];
}
}
/* Se crea la cabecera del archivo */
$info['dumpversion'] = "1.1b";
$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 = "
# +===================================================================
# | Generado el {$info['fecha']} a las {$info['hora']} por el usurio '$usurio'
# | Servidor: {$_SERVER['HTTP_HOST']}
# | MySQL Version: {$info['mysqlver']}
# | PHP Version: {$info['phpver']}
# | Base de datos: '$bd'
# | Tablas: {$info['tablas']}
# |
# +-------------------------------------------------------------------
";
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, $conexion) or die("No se pudo ejecutar la consulta: ".mysql_error());
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, $conexion) or die("No se pudo ejecutar la consulta: ".mysql_error());
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 .= "
# | 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
";
}
/* 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>";
}
}
Sé que entra en esta última función pues le puse un objResponse que me genera un popup. Pero ya os digo, no hace nada y no sé por qué es.
Gracias de nuevo y un saludo