Foros del Web » Programando para Internet » PHP »

Descarga Forzada [DUDA]

Estas en el tema de Descarga Forzada [DUDA] en el foro de PHP en Foros del Web. Hola ForosdelWeb! en esta oportunidad se me presentan ciertos inconvenientes con un codigo PHP para realizar una descarga forzada de Archivos mp3's, estoy adaptando un ...
  #1 (permalink)  
Antiguo 27/12/2010, 03:52
Avatar de iDexterF  
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Descarga Forzada [DUDA]

Hola ForosdelWeb! en esta oportunidad se me presentan ciertos inconvenientes con un codigo PHP para realizar una descarga forzada de Archivos mp3's, estoy adaptando un script que muestra links de una busqueda "X" realizada, estilo mp3raid, antes, salian los resultados y al intentar descargar el mp3, por ser Link directo obviamente lo abre en el navegador, buscando aqui mismo encontre los codigos necesarios para hacer funcionar la descarga forzada y va bien, ahora, el problema es el siguiente.... al darle Click a "Descargar" salta la Ventana de "Abrir/Guardar Como" y al darle a guardar el navegador NO CALCULA el tamaño TOTAL del Archivo, si no que va descargando hasta completar el tamaño necesario entonces se corta la descarga, en General esta bien, Hace su Funcion, Descarga, pero no calcula el tamaño total del Archivo y por ende el usuario no puede identificar cuanto pesa, ni cuanto tiempo tardara la descarga... bueno, aca les dejo el codigo y su implementacion por si a otra persona le es de utilidad, espero puedan resolver mi Problemita :)

Código PHP:
<?php
$file 
$_GET['file'];
$name$_GET['name'];
$name str_replace(".mp3","",$name);
$name str_replace(".mp3.mp3",".mp3",$name);
$name str_replace(' ''+'$name);
$name str_replace('+''_'$name);      
$name $name."[".str_replace(" ""_"trim($settings['sources']))."].mp3";

if(!
file)
{
     die(
'file not found');
}
else
{
           
header("Cache-Control: public");
           
header("Content-Description: File Transfer");
           
header("Content-Disposition: attachment; filename=$name");
           
header("Content-Type: application/mpeg;\r\n");
           
header("Content-Transfer-Encoding: binary");
           
readfile($file);
}
?>
Ojo lo de NAME es una implementacion Aparte, es para que el archivo se guarde con el titulo de la cancion, la parte importante es la de FILE :)

Para Implementarlo hago esto:
Código PHP:
<a href="http://URL.TLD/get.php?file=<?=$url?>&name=<?=$name?>";>BAJAR</a>
"<?=$url?>" es el Link directo al Archivo, get.php el nombre con el que guarde el codigo

Bueno, Creo que Es Todo, Yo no se casi Nada de PHP, pero hago mi mejor esfuerzo, esta vez necesito de su ayuda :) kizas es una tonteria, kizas no

PD: La Descarga la hace Tipo "Stream" No Calcula el Tiempo Final, ni el Tamaño, Igual en Firefox, IE 8 y Chrome
PPD: Los Archivos son publicos, es decir, se encuentran alojados en servidores externos
  #2 (permalink)  
Antiguo 27/12/2010, 03:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Descarga Forzada [DUDA]

me parece que solo te hace falta enviar la cabecera Content-Length, la cual especifica el tamaño preciso del contenido a enviar... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/12/2010, 04:00
Avatar de iDexterF  
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Descarga Forzada [DUDA]

Cita:
Iniciado por pateketrueke Ver Mensaje
me parece que solo te hace falta enviar la cabecera Content-Length, la cual especifica el tamaño preciso del contenido a enviar... (:
Disculpa, entiendo ke es un header, pero abria ke especificarle otra variable?? no se... ¿Podrias colocarme la linea completa?
  #4 (permalink)  
Antiguo 27/12/2010, 04:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Descarga Forzada [DUDA]

hmm... te voy a explicar el valor de dicha cabecera, mas no te hago el código... pues tienes manos y cerebro...

Content-Length debe ser el tamaño en bytes del contenido a enviar al navegador, así que lo puedes obtener con filesize() en caso de ser un archivo, o strlen() en caso de ser texto...

PDTA: por lo que leí de tu primer mensaje veo que los archivos no están alojados en el mismo servidor donde esta tu script, y eso es una mala técnica... pues aunque no lo ves, el servidor primero debe descargar los datos del servidor externo, y de ahí enviar los datos el cliente... si lo piensas es doble carga de trabajo para exactamente lo mismo!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 27/12/2010, 04:16
Avatar de iDexterF  
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Descarga Forzada [DUDA]

Esta bien Esta Bien :), exacto no estan alojados en mi servidor, porque simplemente son miles de archivos alojados en muchos sitios, el script es un "buscador", por eso por otra parte, ya implemente la cabecera, disculpa, asi quedo:

Código PHP:
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$name");
header("Content-Type: application/mpeg;\r\n");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile($file); 
Pero sigue sin funcionar.
  #6 (permalink)  
Antiguo 27/12/2010, 04:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Descarga Forzada [DUDA]

mira, el resultado de copiar los archivos de un servidor externo al propio es la causa de el script no funcione como debería...

¿por que?

por la misma razón que ya te he comentado, pues primero se debe descargar el archivo... y la función filesize(), dependiendo de tu versión y configuración de php sirve solo para archivos locales, no remotos...

sin embargo aún puedes leer el manual, y analizar alternativas...
http://www.php.net/manual/en/functio...ize.php#100434
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: descargas
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 22:33.