Foros del Web » Programando para Internet » PHP »

php y ficheros zip

Estas en el tema de php y ficheros zip en el foro de PHP en Foros del Web. Hola, estoy intntando finalizar una herramienta basada en mysql y php en la que tras unos formularios webs de selección, el resultado extrae datos de ...
  #1 (permalink)  
Antiguo 18/09/2011, 23:12
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta php y ficheros zip

Hola,
estoy intntando finalizar una herramienta basada en mysql y php en la que tras unos formularios webs de selección, el resultado extrae datos de la bd y los pinta en tablas html. El numero de datos suele ser muy alto y resulta en tablas muy extensas y sobre todo grandes en tamaño. Me gustaría cambiar el resultado de las selecciones y en lugar de mostrar las tablas que facilitara un enlace con un fichero .zip que contuviera la información. ¿podéis darme algún orientación de que funciones utilizar en mysql y/o php? Cualquier código de ejemplo será igualmente bienagradecido. Saludos
  #2 (permalink)  
Antiguo 19/09/2011, 03:11
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

Para comprimir y manejar zips, utiliza cualquier class, por ejemplo estas: http://www.phpclasses.org/search.htm...=0&go_search=1. El resto depende mucho de la lógica de tu aplicación. Primero revisa estas clases para ver las posibilidades, luego sigues adelante. En principio es tal como tú lo mencionas, leer de la DB, generar el HTML, guardarlo, comprimirlo, descargar o enviar por email. Espero te sirva, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 20/09/2011, 03:57
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

Gracias!
Ahora veo que mi interprete parece disponer de una clase que es zipArchive y que supongo podrá hacer el proceso, voy a leer sobre su uso y implemento en mi "invento". Gracias.
  #4 (permalink)  
Antiguo 20/09/2011, 05:35
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Respuesta: php y ficheros zip

Ok, zipArchive parece servirme, he hecho pruebas y todo ok.
Quisiera que el fichero una vez que sea obtenido por el usuario se elimine del directorio. No se si tocaría usar la función unlink() o otras opciones.
Por otro lado desconozco si este proceso puede ser peligroso para el servidor (será donde dentro de uno de sus directorios se irán creando y borrando los ficheros según demanda).

gracias y saludos
  #5 (permalink)  
Antiguo 20/09/2011, 07:22
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

No es peligroso, puedes user unlink una vez que se haya descargado, para lo cual debes diferenciar los archivos descargados de los que no se han descargado aún.
Además tienes que preveer que algunos usuario crearán el archivo y luego no lo descargarán, entonces el directorio se irá llenando de temporales. Otra opción es darles a los archivos un tiempo de vida, pasado el cual, los archivos se borran automaticamente. No hace falta un cronJob, puedes ejecutar la función de limpieza cada vez que el usuario carga la página, salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #6 (permalink)  
Antiguo 20/09/2011, 08:17
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

¡¡que bueno !! me pongo con ello a ver como sale.
Para diferenciar los archivos tengo pensado nombrarlos en el momento que se crea el zip con un nombre aleatorio y luego utilizar unlink haciendo referencia al mismo.

Para los ficheros que se vayan quedando colgados me parece mas ajustado la solución de asignarles un tiempo de vida, aunque no se todavía como debo hacerlo.

La solución de eliminarlos cuando se cargue la página no se si podría eliminar algunos ficheros que otros usuarios estén a punto de descargarlos..

Gracias
  #7 (permalink)  
Antiguo 20/09/2011, 10:30
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

Hola repara2,
...te pido un poquito mas...disculpa.

Siguiendo tus consejos hago que cuando se cargue la pagina de resultados, primero me comprima el fichero con los datos. Luego me muestra un <a href=...> con el enlace de "obtener fichero".

Ahora para eliminar el fichero y puesto que la página php ya esta cargada supongo que la solución vendría por poner un enlace ,por ejemplo, a la página de inicio y que al pinchar en ella por una variable POST me pase el nombre del fichero que se ha creado y al cargar la pagina de inicio se ejecute el unlink, con la precaución de un if(!isset(... para que no de error en caso de no existir.

Dime si estoy por el buen camino y como podría darle un tiempo de vida a los ficheros así mismo como sería un poco mas en detalle el proceso de eliminar los temporales cuando el usuario recargue la página.

Gracias mil
  #8 (permalink)  
Antiguo 21/09/2011, 01:17
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

Esa es una solución, aunque tienes que preveer que el usuario no siga la navegación propuesta o cierre el navegador, etc. en este caso el fichero se queda allí eternamente. Se trata entonces de eliminar "automaticamente" los archivos que ya no sirven. Para esto se deben marcar de alguna manera, por ejemplo, con el id de usuario. Otra opción es crear los archivos con id_usuario + timestamp. Ahora estableces un "tiempo de vida" de 5 minutos. Cada vez que cualquier usuario entra en index.php, una función lee el directorio donde están los archivos, ahora comparas el timestamp con la hora actual, cualquier archivo que tenga más de 5 minutos se elimina automaticamente. Así, aunque el usuario cierre el navegador, te aseguras que el directorio estará siempre limpio. Los 5 minutos le dan al usuario un margen coherente para hacer click, pasado ese tiempo tiene que crear el archivo nuevamente. No sé si te ayudo, esta es una solución posible, salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #9 (permalink)  
Antiguo 21/09/2011, 03:30
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

Me ayudas mucho repara2
Voy a seguir peleándome con el código.
Gracias de nuevo
  #10 (permalink)  
Antiguo 21/09/2011, 22:13
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

Buneas repara2,
me esta costando aplicar la solución del borrado automático.
No se como:
1.- asignar el nombre del fichero al timestamp.
2.- establecer el tiempo de 5 minutos
3.- ejecutar función de forma automática cuando un usuario entra en index, eliminando aquellos con una antigüedad > 5min

Si tienes algún código que pueda guiarme.

Gracias!
  #11 (permalink)  
Antiguo 21/09/2011, 22:25
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

Disculpa, ya me estoy centrando
lo de asignar el nombre del fichero al tiempo lo tengo resuelto con:

$file_name=time()

lo cual imprime al nombre del fichero al valor actual de Epoch. Luego restandole 300 (5minx60) tengo la antigüedad máxima.

Me faltaría algún consejo para el punto tres del anterior msg.
Saludos.
  #12 (permalink)  
Antiguo 22/09/2011, 02:07
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

Haces una función que lea el dir y borre los ficheros. Se puede ejecutar en cualquier script que sea seguro que se ejecuta para todos los usuarios, por ejemplo, en index.php.
Cada vez que index.php se carga, se ejecuta la función, como el punto de entrada de todos los usuarios es index.php, se ejecuta siempre. Otra opción es ejecutarla como cron job, pero eso es un poco más avanzado. Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #13 (permalink)  
Antiguo 22/09/2011, 02:14
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

...a ver como lo ves, hago un

$dir=opendir("c:/xampp/docs/proyecto/temp");

while ($file =readdir($dir)){
if ((time() - filemtime('temp/'.$file>120))
unlink('temp/'.$file);
}
closedir($dir);

aqui en lugar de vincularse al nombre del fichero lo hace en base a la última modificación del mismo y que entiendo que para mi caso es válido puesto que se crea a partir de una consulta en mysql y se almacena en el directorio temp con una fecha/hora por lo que a partir de 120 sg se eliminaría.

Es lo mas que me he podido acercar a tus consejos...¿como lo ves?

Gracias.
  #14 (permalink)  
Antiguo 22/09/2011, 07:54
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

Bien, PERo si borras todos los archivos, puede ser que si hay dos o más usuarios conectados a la vez, uno le borre los archivos al otro. Por eso, además del timestamp, deberías usar como nombre de archivo el id de usuario, de manera que al borrar, cada usuario borra sólo sus archivos. Salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #15 (permalink)  
Antiguo 23/09/2011, 02:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: php y ficheros zip

...mmm lo estoy pensando pero volviendo al planteamiento que ta había comentado, una vez generado el fichero (cuyo nombre se genera de forma aleatoria de 15digitos) el usuario tendrá 2 minutos para descargarlo y pasado el tiempo, si algún otro usuario entrara en index.php será borrado de los temporales, con lo que el usuario tendría que volver a generar el infome pero entiendo que los dos minutos de margen es suficiente tiempo (tal vez lo suba a 5min)

Creo que en este caso no importaría que fuera otro usuario el que lo eliminara. Si crees que se me sigue escapando algo y ves necesario que la eliminación se vincule al nombre del usuario dímelo.

saludos
  #16 (permalink)  
Antiguo 23/09/2011, 06:23
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: php y ficheros zip

Está bien la idea. 15 digitos aleatorios, dependiendo de la cantidad de usuarios de tu página es suficiente. También el tiempo de validez de la descarga depende del tráfico, 2 a 5 minutos está bien. El tema de usar id de usuario es una medida más para asegurarte de que nadie borre el archivo, pero ya te digo que todo depende de tu modelo. 1 Saludo,
__________________
Fere libenter homines, id quod volunt, credunt.
  #17 (permalink)  
Antiguo 23/09/2011, 14:34
 
Fecha de Ingreso: septiembre-2011
Mensajes: 73
Antigüedad: 13 años, 2 meses
Puntos: 0
De acuerdo Respuesta: php y ficheros zip

Me has ayudado mucho. Saludos

Etiquetas: ficheros, html, mysql, tabla, zip, formulario
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 23:13.