Foros del Web » Programando para Internet » PHP »

Descargas de archivos

Estas en el tema de Descargas de archivos en el foro de PHP en Foros del Web. Que tal foreros: Bueno mi pregunta es la siguiente: en mi pagina se pueden descargar algunos archivos MP3 y MIDI's, pero lo que quiero es ...
  #1 (permalink)  
Antiguo 16/12/2004, 21:21
Avatar de neothemaster  
Fecha de Ingreso: diciembre-2004
Ubicación: Estado de Mexico
Mensajes: 179
Antigüedad: 13 años
Puntos: 0
Pregunta Descargas de archivos

Que tal foreros:

Bueno mi pregunta es la siguiente: en mi pagina se pueden descargar algunos archivos MP3 y MIDI's, pero lo que quiero es que al darle click al link aparezca la ventana de dialogo donde te pregunta en donde quieres guardar el archivo, pues lo que hace cuando se da click en el link es abrir el Reproductor Windows Media y empieza a reproducir el MP3, como lo logro?
  #2 (permalink)  
Antiguo 16/12/2004, 22:15
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
necesitas enviar encabezados apropiados al navegador mediante la función header. Por ejemplo\

Código PHP:
header('Content-type: audio/x-wav');
header('Content-Disposition: attachment; filename="'.$file.'"');
readfile($file);
echo 
$file
  #3 (permalink)  
Antiguo 17/12/2004, 08:57
Avatar de neothemaster  
Fecha de Ingreso: diciembre-2004
Ubicación: Estado de Mexico
Mensajes: 179
Antigüedad: 13 años
Puntos: 0
A que te refieres

Sism82:

Me surgio la duda con respecto a que te refieres con "Encabezados apropiados al navegador?

El codigo que me pones es para bajar cualquier tipo de archivo de audio? porque veo que trae una linea que dice: "audio/x-wav" y este codigo en que parte de mi HTML va?

Disculpa tanta pregunta pero yo con PHP soy bastante novato y lo entiendo mas o menos
  #4 (permalink)  
Antiguo 17/12/2004, 09:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La cabecera HTTP: Content-type: define el formato MIME del archivo que se va a entregar al navegador .. la siguiente cabecera sobre Content-Disposition indica en ese caso al "navegador" (cliente mejor dicho) que el dato que se le va a enviar es para que lo descargue.

Todo eso de "cabeceras HTTP" no son própias de PHP ni las define este, PHP tan sólo te pone a tu disposición unas funciones como header() para "enviarlas" .. lo que sean o definan es própio del protocolo HTTP no de PHP.

El script que te propone sism82 hace dos cosas:
1) prepara las cabeceras HTTP para indicar al navegador que tipo de datos se le van a enviar y como ha de procesarlos.
2) PHP vía "readfile()" lee el archivo de su ruta y nombre dado y le entrega al "buffer de salida de PHP".

El formato "MIME" de tu archivo a descargar lo puedes obtener de alguna forma bien sea al "subir" tu archivo .. registras su formato MIME que es (es lo ideal y más rápido) o bien al "abrir" tu archivo .. antes miras que MIME es (con: nomeacuerdolafuncion())

El objetivo de todo esto es tener un script que lo llames tipo:
bajar.php?archivo=tal.tal

o algo así .. NO sé si administras tus archivos en una BD o tan sólo los tienes ahí en un directorio de tu servidor y los links hacia el archivo los haces tu "a mano".

De todas formas .. como el archivo es sólo para "forzar" la descarga .. el tipo de archivo (el MIME) no es necesario indicarlo (creo) .. prueba algo tipo:

Código PHP:
<?
$file
="nose.mp3";
header('Content-Description: File Transfer'); 
header('Content-Type: application/force-download'); 
header('Content-Length: ' filesize($filename)); 
header('Content-Disposition: attachment; filename=' basename($file)); 
readfile($file); 
?>

Un saludo,
  #5 (permalink)  
Antiguo 17/12/2004, 09:32
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
los encabezados son datos que se envian al navegador (por ejempl Internet Explorer) desde el servidor que envia la página web. En esos encabezados se encuentra información importante, como el tipo de contenido que se va a enviar, si vas a enviar un archivo de audio, debes informarlo, para ello se puede usar la función header() que incluí en el ejemplo anterior. Ese código lo que hace es enviar un archivo wav determinado por la variable $file. La variable $file tu la defines ya sea por un enlace (a href) o por cualquier otro método que elijas.

Entonces ese código es todo lo que necesitas. Por ejemplo si mandas llamar desde una liga la página download.php?file=archivo.wav , entonces reemplaza $file por $_GET['file']; suponiendo que no valides la existencia del archivo.

esta liga te aclarara un poco las cosas con respecto al tipo de encabezados que se envian para determinar la tipo de información.
http://hosting.lomejordeinternet.net...c_page47.shtml
habla sobre los mime-types, funcionan para http, smtp etc...

un saludo
  #6 (permalink)  
Antiguo 17/12/2004, 13:03
Avatar de neothemaster  
Fecha de Ingreso: diciembre-2004
Ubicación: Estado de Mexico
Mensajes: 179
Antigüedad: 13 años
Puntos: 0
el simbolo '?'

Gracias por la ayuda me ha servido de mucho, pero me surgio una duda mas me ponen que debo llamar a la liga de la cual voy a llamar a los archivos pero veo que ponen un signo de ?, esto lo debo poner manualmente?
  #7 (permalink)  
Antiguo 17/12/2004, 16:30
 
Fecha de Ingreso: diciembre-2004
Mensajes: 272
Antigüedad: 13 años
Puntos: 4
Esa misma duda tenia yo, pero CLUSTER me ayudo con esta respuesta:

------
En las FAQ's de este foro tienes un ejemplo que hasta usa la opción "resume" (para que tus descargas si se cortan las puedas volver a retomar).

http://www.forosdelweb.com/f18/faqs-php-530600-post306781/

Se trata básicamente de componer las cabeceras HTTP adecuadas para indicar a tu "cliente" (navegador) que el archivo es para descargar y hacer que PHP "lea" el arhivo y lo entregue al buffer de salida.

Las propuestas que mencionana tipo que el archivo sea un .exe .. o un .zip .. el hecho de que el navegador de turno lo interprete como archivo a "descargar" es simplemente por qué todo lo que no asocia a algún "plug-in" o aplicación (como los .doc, .pdf .. las imagenes .. etc si es que tienen software asociado a esas extensiones ..) será descargado.

----------------------
Espero que te sirva, a mi me ayudo demasiado.
suerte!
  #8 (permalink)  
Antiguo 17/12/2004, 18:52
Avatar de neothemaster  
Fecha de Ingreso: diciembre-2004
Ubicación: Estado de Mexico
Mensajes: 179
Antigüedad: 13 años
Puntos: 0
Gracias por el dato, le dare una leida y os comunico como me fue.

Gracias
  #9 (permalink)  
Antiguo 18/12/2004, 22:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
¿Te refieres a que tienes que crear links tipo?:

Código PHP:
<a href="bajar.php?archivo=blabla.zip">bajar blabla.zip</a
Bueno .. ese "?" es el caracter que se usa para definir que lo que va despues de tu nombre de tu script.php que vas a ejecutar .. son el "query string" (o variables) .. ahì hay una variable "archivo" y un valor "blabla.zip" .. por poner un ejemplo .. por què podrìa ser "id=1" o cosas asì .. todo depende como "localices" a tu archivo bajo la referencia que le pases a tu script php de "bajar.php" que Tienes que crear y que mas o menos es como los ejemplos que aquì y en la FAQ que te recomendaron veras.

Un saludo,

Un saludo,
  #10 (permalink)  
Antiguo 19/12/2004, 17:17
Avatar de neothemaster  
Fecha de Ingreso: diciembre-2004
Ubicación: Estado de Mexico
Mensajes: 179
Antigüedad: 13 años
Puntos: 0
Otra duda

Haber hay algo que aun no me queda muy claro y es que en todos los ejemplos siempre me ponen: "algo.php?archivo=blbla.zip" por ejemplo, pero tengo una duda, miren yo tengo por ejemplo la pagina "descargas.htm" y ahi estan los nombres de los archivos que se pueden bajar, mi duda es: tengo que crear un archivo php (en este caso algo.php) independiente al de descargas.htm?? y en archivo "algo.php" va este codigo????
<?
$file
="nose.mp3"
;
header('Content-Description: File Transfer'
);
header('Content-Type: application/force-download'
);
header('Content-Length: ' . filesize($filename
));
header('Content-Disposition: attachment; filename=' . basename($file
));
readfile($file
);
?>


Si esto es correcto debo crear diferentes php's en donde la parte de $file le ponga un nombre de archivo diferente??? o como es que debo de hacer para diferenciar un archivo del otro???

Y solo debo utilizar una sola cabezera en el archivo "descargas.htm"??
  #11 (permalink)  
Antiguo 19/12/2004, 20:10
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
archivo "descargas.htm"
Código:
<a href="download_file.php?archivo=asturias.mp3">Asturias - Isaac Albeniz</a>
<a href="download_file.php?archivo=moon_light_sonata.mp3">MoonLight Sonata - Beethoven</a>
archivo "download_file.php"
Código PHP:
$file $_GET['archivo'];
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' filesize($filename));
header('Content-Disposition: attachment; filename=' basename($file));
readfile($file); 
Listo, como puedes ver, el link apunta hacia "download_file.php?archivo=asturias.php"
Todo lo que hay despues del signo de interrogacion son variables que se envian al servidor. PHP automagicamente te pone esas variables en el arreglo GET para que tu puedas accederlas. Entonces esa variable que recibes es la que usas para bajar el archivo que se selecciono.
  #12 (permalink)  
Antiguo 20/12/2004, 05:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No se olviden también de "validar" que archivos se pueden descargar ..

De hecho . .la misma rutina que "valida" que archivos se pueden bajar por médio de una Base de datos, un array que contenta esos nombres y rutas de archivos .. podría generar ese "descargas.html" (bueno sería descargas.php).

No dejes para más tarde "validar" que archivos se pueden descargar ..por qué sino te harán algo tipo:

download_file.php?archivo=config.php

o algo así . y te "bajaran" con tus própias rutinas scripts .php que para nada te interesa que te "vean" el código.

Un saludo,


Un saludo,
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 10:25.