Foros del Web » Programando para Internet » PHP »

Problema con descarga de archivos

Estas en el tema de Problema con descarga de archivos en el foro de PHP en Foros del Web. Hola a tod@s: Tengo un fichero download.php. En este fichero lo que hago es abrir la base de datos que tengo para las descargas, y ...
  #1 (permalink)  
Antiguo 13/11/2003, 13:56
 
Fecha de Ingreso: diciembre-2001
Ubicación: Vigo
Mensajes: 38
Antigüedad: 22 años, 3 meses
Puntos: 0
Problema con descarga de archivos

Hola a tod@s:

Tengo un fichero download.php. En este fichero lo que hago es abrir la base de datos que tengo para las descargas, y seleccionar el zip correspondiente al Id que me pasa el QUERY_STRING.

Luego vienen las cabeceras (header) para la descarga del fichero. Lo que ocurre es que en vez de descargar el fichero seleccionado con su nombre, p.ej: descarga.zip, lo que hace es bajarlo con el nombre de la página (download.php).

Lo curioso es que si lo descargo y lo renombro como .zip, el contenido del zip sí es correcto.

He probado de varias maneras, pero no consigo que lo descargue con el nombre correspondiente. Agradeceré cualquier ayuda y también si existe algún manual donde expliquen el funcionamiento de las cabeceras.

Gracias de antemano. Un saludo.
__________________
El que estudia, olvida; el que lee, aprende; y el que hace, sabe (Algún autodidacta, supongo...)
  #2 (permalink)  
Antiguo 13/11/2003, 17:18
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
¿Podrías poner el código que usas? Un código parecido uso yo: tengo un ID en la base de datos y selecciono la URL del archivo, finalmente lo entrego al navegador:

Código PHP:
conectar(); //Conectamos a la base de datos
$id=$_GET['id'];
$tabla="url";
$result=mysql_query("SELECT * from $tabla WHERE id=$id");
$row=mysql_fetch_array($result);
$url=$row['url'];
desconectar();
// Iniciamos la descarga
header("Location: $url");
exit; 
Es un código que podría simplificarse un poco más... pero te puede servir.

Otra cosa distinta es que leas el fichero con un readfile() o que lo saques de la base de datos... ¿es ese tu caso? Si es así, un código vale más que...
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.

Última edición por ferny; 13/11/2003 a las 17:20
  #3 (permalink)  
Antiguo 20/11/2003, 06:39
 
Fecha de Ingreso: diciembre-2001
Ubicación: Vigo
Mensajes: 38
Antigüedad: 22 años, 3 meses
Puntos: 0
Gracias por tu respuesta, ferny, y perdón por tardar en contestar. He estao muy liao....

Verás, el tipo de descargas debe ser sólo para usuarios registrados, por lo que no me interesa que se vea todo el path del archivo que se desea descargar, y que salga la típica ventanita: " Está descargando el archivo xxxxx.zip de servidor.com ". Por lo tanto, en el Query_String le mando el Id del archivo, para luego abrir la base y seleccionar el nombre del archivo.

Hasta aquí, ningún problema. He buscado en el foro y en otros scripts que he encontrado por ahí, y creado una función para descarga. El caso es que no tengo pajolera idea de cómo funcionan los headers (por favor, si alguien conoce un link donde pueda sacar información, me lo postee - zenkiu ).

Ahí va el código:

function descargar($archivo){
global $archivo;
global $ruta;
global $total;
$total=$ruta.$archivo;

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Type: application/x-zip-compressed");

Header ("Content-Type: application/octet-stream");
Header ("Content-Length: ".filesize($total));
Header( "Content-Disposition:attachment;filename=archivo.zip");
header("Content-Transfer-Encoding: binary");
readfile("$total");
}

He probado a seleccionar unos headers y dejar otros, porque con toda seguridad no todos son necesarios.

El problema, vuelvo a comentarlo, es que en la ventanita que aparece para informar de la descarga, pone: "Está descargando el archivo descarga.php" (que es la página donde tengo el script) en vez de archivo.zip ( que sería el archivo correcto a descargar).

Vuelvo a agradecer toda ayuda que me pueda aclarar un poco todo este rollo. Un saludote.
__________________
El que estudia, olvida; el que lee, aprende; y el que hace, sabe (Algún autodidacta, supongo...)
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 16:59.