PHP - Elegir ruta al exportar base de datos

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Elegir ruta al exportar base de datos

Publicado por Jesus Alonso (13 intervenciones) el 25/09/2022 18:10:35
Buenas, como dice el titulo necesito saber cómo puede escoger la ruta donde guardaré la copia de seguridad de la base de datos, es decir, el tipico exportar trae este campo:

1
define("BACKUP_DIR", 'respaldos');


el problema es que la ruta la predefino yo, y si lo dejo vacio me lo guarda en la ruta donde esta el archivo "exportar.php", lo que quiero es que al dar al boton de exportar base de datos me cargue la ventana de "guardar como" donde puede elegir el nombre del archivo y el lugar especifico donde lo puedo guardar, me recomendaron un archivo que "fuerza" a esa ventana a aparecer pero eso al parecer solo ocurre cuando voy directamente a descargar el archivo cosa que el modulo no hace exactamente.

el mismo consiste en un formulario donde solo se ubica un boton de exportar, el action redirecciona a "exportar.php" el cual es el tipico archivo php sacado de interner que te deja tu archivo .gz

intente igualmente usar un input donde puedo elegir carpetas pero el problema de ese es que si la carpeta esta llena, tendria que cargar todos los archivos antes de realizar otras acciones (eso sin mencionar que ahi aun no se como obtener la ruta que eligió el usuario)

mi pregunta seria
a) como puedo desplegar la ventana de "guardar como" y elegir donde se guardará la copia
o
b)Hay alguna clase de input que solo me permita escoger la ruta para pasarsela al exportar.php (archivos adjuntos)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Elegir ruta al exportar base de datos

Publicado por Ivan (118 intervenciones) el 26/09/2022 17:22:08
Hola,

para eso tienes que modificar las cabeceras de la página web con PHP e indicar que la página es un archivo descargable con las siguientes instrucciones.

1
2
3
4
5
6
7
8
<?php
$archivo = 'archivo_del_servidor.txt';
$nombre = 'nombre_archivo_descarga.txt';
header("Content-Type: application/octet-stream");
header('Content-Transfer-Encoding: binary');
header("Content-Disposition: attachment; filename=".$nombre);
readfile($archivo);
?>

Para que funcione esta página PHP sólo debe ofrecer la descarga, nada más. El archivo debe existir en el servidor y lo puedes pasar a esta página como un parámetro GET y que sea recogido por $archivo.
En la variable $nombre indicas el nombre del archivo que aparecerá en el "guardar como" ...

No he puesto rutas al archivo por lo que lee el directorio donde está ubicado el script, a tener en cuenta ;)

Espero que te sirva.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Elegir ruta al exportar base de datos

Publicado por Jesus Alonso (13 intervenciones) el 26/09/2022 21:09:32
gracias por la idea la probaré hoy a ver que tal me resulta aunque tengo la curiosidad, si el archivo se general con el exportar.php
debo esperar a que php lo descargue al servidor (local por cierto) para luego enviarlo a la ruta donde indique el usuario con ese codigo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Elegir ruta al exportar base de datos

Publicado por Ivan (118 intervenciones) el 26/09/2022 22:14:02
Hola,

como he dicho, el archivo que quieres que se descargue ya debe estar generado en el disco duro del servidor, sea el localhost o no.
Como sabes el nombre y la ruta se la pasas a exportar.php?file=tu_archivo.xxx (pongamos que exportar.php es donde está el script)

Y lo que hace exportar.php es simplemente leer y descargar el archivo que le has pasado. Puedes hacerlo incluso con un link tipo:

<a href="exportar.php?file=tu_archivo.xxx">Descargar</a>

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Elegir ruta al exportar base de datos

Publicado por Ivan (118 intervenciones) el 27/09/2022 11:17:45
NOTA: En caso de hacerlo a través de un link debes filtrar la URL o cualquiera, modificando la URL, podrá descargar otros archivos de tu servidor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Elegir ruta al exportar base de datos

Publicado por Jesus Alonso (13 intervenciones) el 03/10/2022 21:49:16
Bueno, intente de todas las maneras posibles...colocandolo en el archivo exportarbd.php, colocandolo en exportar.php, creando un archivo solo y llamarlo a traves de ajax para que descargara el archivo creado por exportarbd y nada, de ninguna manera descarga o hace lo que necesito

me explico un poco mejor de nuevo...lo que necesito es que el archivo que crea exportarbd que es la copia de la base de datos .gz no se guarde en una carpeta dentro del mismo sistema, sino que se guarde en una locacion que el usuario elije cada vez que descarga dicha copia (cabe añadir que dicho sistema lo tendrá el usuario en su computadora y no estara en internet por eso explico que es servidor local)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Elegir ruta al exportar base de datos

Publicado por Ivan (118 intervenciones) el 04/10/2022 00:36:04
Hola,

cuando dices que el archivo que crea exportarbd que es la copia de la base de datos .gz no se guarde en una carpeta dentro del mismo sistema, sino que se guarde en una locacion que el usuario elije cada vez que descarga dicha copia

Eso no es posible ...

Tienes que guardar el archivo sí o sí en el sistema, servidor o como quieras llamarlo y entonces haces la descarga tal y como he explicado antes.

Luego puedes borrar el archivo después de la última linea readfile($archivo); si quieres.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Elegir ruta al exportar base de datos

Publicado por Jesus Alonso (13 intervenciones) el 04/10/2022 05:18:55
ok pero...insisto intente lo que dijiste pero intente poner los header en exportarbd y me da error ya que como exportar.php esta en include toma como que imprimi cosas y no toma el header

si lo coloco en exportarbd no me funciona directamente

y en un archivo aparte llamandolo con ajax no hace nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Elegir ruta al exportar base de datos

Publicado por Ivan (118 intervenciones) el 04/10/2022 21:05:13
Hola,

ya veo el error, estamos hablando del archivo exportar.php para dos cosas distintas ...

Por un lado se crea el backup de la DB en tus archivos exportar y exportar_bd

Por otro lado se debe escribir este backup en un archivo del servidor, ofrecer el enlace de la descarga y después eliminar el archivo.

Como dije, el script de descarga debe estar en un archivo php a parte, pero utilicé el mimos nombre (exportar.php) en vez de decir descargas.php. Vamos a recapitular y ponerlo todo punto por punto.

Pon el script siguiente en un archivo nuevo, por ejemplo descargas.php

1
2
3
4
5
6
7
8
9
<?php
$file = "/directorio_de_descargas/ DBarchivo.txt";
header("Content-Length: ".filesize($file));
header("Content-Transfer-Encoding: binary");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".basename($file));
readfile($file);
unlink($file);
?>

Este script en el archivo descargas.php descargará el backup que guardaremos y después elimina el archivo.
Asegúrate de cambiar el /directorio_de_descargas/ por el directorio donde guardarás temporalmente el archivo DBarchivo.txt (puedes ponerle el nombre que quieras).

Ahora vamos a tu archivo exportar.php donde obtienes el backup de la DB en tu última linea:

1
$output = $backupDatabase->getOutput();

Debajo de esta linea creas el archivo del backup y un enlace para la descarga, por ejemplo:

1
2
3
4
5
6
7
<?php
$file = "DBarchivo.txt";
$fp = fopen($file, "w");
fwrite($fp, $output);
fclose($fp);
echo '<a href="descargas.php">Descargar Backup</a>';
?>

y listos, ya lo tienes y debería funcionar.

NOTAS: Tal y como está escrito sólo ofrece la descarga ofrecida por $output en ese momento y nada más. Hay la posibilidad que si dos usuarios lo usan al mismo tiempo se solapen y sobreescriban.

Una vez consigas que te funcione puedes añadirle más opciones.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar