Foros del Web » Programando para Internet » PHP »

Borrar archivo luego de descargarlo

Estas en el tema de Borrar archivo luego de descargarlo en el foro de PHP en Foros del Web. Hola a todos! Tengo un script que me genera un archivo, y quisiera saber si hay manera de que luego de que el usuario lo ...
  #1 (permalink)  
Antiguo 25/07/2005, 17:44
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Borrar archivo luego de descargarlo

Hola a todos!

Tengo un script que me genera un archivo, y quisiera saber si hay manera de que luego de que el usuario lo descarge, este archivo se borre, con la función unlink.

Se me ocurre que puede ser, que presionando un boton de un formulario, me descargue el archivo (<a></a>), pero como podría hacer para que me corra una función que descargue el archivo y luego me borre el archivo??.

Espero haber sido explicito.
__________________
Mi blog
  #2 (permalink)  
Antiguo 25/07/2005, 17:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
crea una pagina que haga el borrado y a la vez descarge el archivo y llamas a esa pagina desde el link, pasando una variable que contenga el archivo a bajar.
  #3 (permalink)  
Antiguo 25/07/2005, 18:10
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Ya, crear la pagina que haga el borrado si capto. Peeeero como hacer para que descargue????
__________________
Mi blog
  #4 (permalink)  
Antiguo 25/07/2005, 18:17
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
con header(), algo asi:

<?php
header("Content-disposition: attachment;filename=$nombre");
header("Content-Type: $mimetype");
readfile($ruta_archivo);
unlink($ruta_archivo);
?>
  #5 (permalink)  
Antiguo 25/07/2005, 18:48
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Hola sorry por la ignorancia, pero...
Me podrías explicar que son las variables: $nombre y $mimetype????
__________________
Mi blog
  #6 (permalink)  
Antiguo 26/07/2005, 01:13
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
www.php.net/header

$nombre será el nombre de tu archivo.
$mimetype será el MIME TYPE del archivo...

... Núnca he hecho algo parecido, tengo mis dudas de que esto funcione; según tengo entendido, tú solo le dices a el navegador que el archivo a de descargarse, pero mientras se esta descargando tendrá que ser leido desde el servidor... ¿qué pasa si lo borras inmediatamente?? ... te agradeceria nos mantubieras al tanto de los comportamientos que veas .

La mejor de las suertes!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 26/07/2005 a las 01:19
  #7 (permalink)  
Antiguo 26/07/2005, 09:35
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Pues por ahora, lo he probado y me descarga el archivo php :S
(Debo de ver que pasa, facil que es porque no lo he definido en el conf.php)

Pero pienso lo mismo que Jam, no hay manera de darle un tiempo???, o de que con Javascript sepa que el archivo ha terminado de bajar y en ese momento se active una funcion php que borre el archivo??
__________________
Mi blog
  #8 (permalink)  
Antiguo 27/07/2005, 00:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Sacado de www.php.net/readfile (usando el buscador con "forzar descarga" seguro igual habrá resultados):
Código PHP:
<?php
$file 
'/var/www/html/file-to-download.xyz';
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' filesize($file));
header('Content-Disposition: attachment; filename=' basename($file));
readfile($file);
?>
Pruebalo... primero experimenta , quiero ver el comportamiento...

Si estoy en lo correcto... si manejas BD puedes crear un campo auxiliar donde le darás algún valor si se llamó para su descarga... así pués solo si está vacio descargas y sí tiene valor borras. Podrías borrar todos los que tiene valor en el mismo script de descarga (para no alargar su permanencia) ó hacer un CRON JOB... solo ideas, igual no me parece haber leído cómo es que llamas a tus archivos.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 01/08/2005, 12:17
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Como es eso lo del CRON JOB???
COmo llamo a los archivos para bajarlos??, lo puse en el primer post.... :S
__________________
Mi blog
  #10 (permalink)  
Antiguo 01/08/2005, 13:28
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
CRON JOB es un programa en LINUX --es común los servidores tengan este SO-- que lo que hace es ejecutar una acción a una hora determinada... El equivalente para Windows es el Administrador de Tareas. Esto ya no corresponde a PHP sino a el propio software y/o SO... Puede ser que esta opción la tengas en tu Panel de Control de tu hosting --no si es gratis-- ó quizá debas ponerte en contacto con tu proovedor...

Repito que núnca he hecho tal cosa... pero en teoria --lo apostaría-- el borrar el archivo INMEDIATAMENTE después de forzar la descarga debe provocar errores. Por ello sugerí "etiquetar" dicho archivo y con un CRON JOB ú en el mismo script a el leerse borrar dicho archivo solo si ha pasado un tiempo considerable.

Pero bueno... ¿cómo llamarlos para su descarga??; no nos dices cómo lo manejas (o quizá ya lo olvidé pero en una leida rápido no lo veo). En el script que dejo, ve cómo crea una variable $file con la ruta del archivo a descargar... así pués, tú haz algo similar... asignale la ruta a esa variable... ya sea pasandole el valor completo ó una id para consultar en una BD la dicho valor... ambos por URL:

Código HTML:
<a href="descargar.php?file=archivo.ext">Descargar</a>
<a href="descargar.php?id=XX">Descargar</a> 
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #11 (permalink)  
Antiguo 02/08/2005, 08:04
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Holas, encontre esto:

http://www.bitfolge.de/pseudocron-en.html

Que segun dice es como un CRON JOB pero en PHP, pero tengo problemas para configurarlo .

Alguien me ayuda??
__________________
Mi blog
  #12 (permalink)  
Antiguo 02/08/2005, 08:47
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Utilizá http://www.webcron.org/index.php?&lang=es, que es un servicio para correr, por ejemplo, .php remotos a una hora determinada (lo mismo que un cron, de hecho es uno pero en un servicor externo).
Hace un file que elimine, como dijo jam1138, los files marcados en la db, y cargalo en este sitio que te digo.
Ahi mismo tienen toda la ayuda neecsaria.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #13 (permalink)  
Antiguo 02/08/2005, 09:08
Avatar de Galled  
Fecha de Ingreso: marzo-2005
Ubicación: Lima
Mensajes: 254
Antigüedad: 12 años, 8 meses
Puntos: 0
Gracias :)
__________________
Mi blog
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 03:42.