Foros del Web » Programando para Internet » PHP »

Bajarse un archivo creado dinamicamente desde el servidor

Estas en el tema de Bajarse un archivo creado dinamicamente desde el servidor en el foro de PHP en Foros del Web. Hola amigos, vereis tengo un problema, yo creo un archivo dinamicamente cuando se ejecuta una determinada pagina, lo que quiero saber es que cabeceras tengo ...
  #1 (permalink)  
Antiguo 16/05/2006, 11:30
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
Exclamación Bajarse un archivo creado dinamicamente desde el servidor

Hola amigos, vereis tengo un problema, yo creo un archivo dinamicamente cuando se ejecuta una determinada pagina, lo que quiero saber es que cabeceras tengo que poner para enviar ese archivo al cliente, osea para hacer un download.
El archivo es un ZIP.
Y otra cosa, el archivo zip esta creado, pero como hago para poder enviar ese archivo al cliente y ademas borrar ese archivo. Se puede crear alguna especie de archivo temporal o algo antes de enviar o simplemente escribiendo las cabeceras correctas para hacer el dowload y la ultima orden un unlik funcionara?
__________________
SaRvErOk :ojotes:
  #2 (permalink)  
Antiguo 16/05/2006, 11:46
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo

Verifica este link http://www.forosdelweb.com/showthrea...scarga+archivo. La solución que da de jam1138 te puede ayudar a resolver tu problema.

Saludillos.
  #3 (permalink)  
Antiguo 16/05/2006, 11:48
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 18 años
Puntos: 2
Tendrías que utilizar header() para eviarle al navegador las cabeceras que le indiquen que se trata de una descarga.
Por otro lado, no necesitas crear el archivo (es decir darle un nombre y guardarlo en el servidor) y luego borrarlo, basta con que le envies al navegador el contenido de dicho archivo:
Muy simple seria así:

Código PHP:
<?
$tu_archivo 
genera_zip(); //Generas el archivo
header('Content-Disposition: attachment; filename="nombre_archivo"');
echo 
$tu_archivo;
?>
Podrías agregar otras cabeceras para indicar el tipo mime y algunas otras cosas. Podrias revisar la documentación de la función header() para más información.
Saludos.
  #4 (permalink)  
Antiguo 16/05/2006, 11:56
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
Exclamación

Hola Notwen, veras si te acuerdas del post en el que hablamos de crear archivos ZIP estoy utilizando otra implementacion para crear el archivo zip, por que resulta mucho mas rapida y en archivos de dimensiones considerables no me da problemas a la hora de adjuntar los archivos grandes al zip, ademas de que lo hace muchisimo mas rapido.
La implementacion que uso tmb estaba en la direccion que me diste en el otro post y la documentacion es esta PclZip:
http://www.phpconcept.net/pclzip/man/en/index.php

asi que tengo este codigo:
Código PHP:
//genero el zip y se guarda el archivo en el servidor 
if($v_list != 0){//Si todo fue bien ...
    
header('Content-type: application/octet-stream');
    
header('Content-Disposition: attachment; filename='.$nombre_fichero);
    
$fp=fopen($nombre_fichero,'rb');
        
fpassthru($fp);
    
unlink($nombre_fichero);

Pero no soy capaz de hacer que el unlink funcione, alguna sugerencia??? Lo que quiero es que el usuario se baje el archivo pero que luego se borre del servidor.
__________________
SaRvErOk :ojotes:
  #5 (permalink)  
Antiguo 16/05/2006, 12:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Podrías usar simplemente:

Código PHP:
readfile($la_ruta_y_nombre_hacia_el_archivo_generado);
unlink($la_ruta_y_nombre_hacia_el_archivo_generado); 
La función readfile() lee y entrega lo que lea del archivo directamente al buffer de salida de PHP (que ya ajustastes algo por cabeceras HTTP).

Ojo cuando usas header() (envio de cabeceras HTTP al cliente) con espacios, saltos de línea y otras "salidas" HTML/etc al cliente (navegador) antes de esas líneas de código que usan header().

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 16/05/2006 a las 12:58
  #6 (permalink)  
Antiguo 16/05/2006, 12:51
 
Fecha de Ingreso: enero-2005
Mensajes: 115
Antigüedad: 19 años, 3 meses
Puntos: 1
De acuerdo

Bien, gracias Cluster, ya me funciona perfectamente, espero que el buffer de salida de PHP que utiliza el readfile no tienga limite.

Código PHP:

if($v_list != 0){//Si todo fue bien ...
    
header('Content-type: application/octet-stream');
    
header('Content-Disposition: attachment; filename='.$nombre_fichero);
    
readfile($nombre_fichero);
    
unlink($nombre_fichero);

Gracias
__________________
SaRvErOk :ojotes:
  #7 (permalink)  
Antiguo 16/05/2006, 12:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. No te lo puedo confirmar ahora (no he repasado la documentación de PHP) .. Pero la diferencia principal entre fpassthru() y/o readfile() me parece que está en que una función lee el archivo entero a "memoria" (con el consumo de recursos que esto conlleva, esto sería para readfile()) y lo entrega al buffer de salida .. la otra función lo entrega según lee (en bloques de N? Bytes ...).

Tendrías que investigar esas funciones si notas un consumo de recursos excesivo ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 17:15.