Foros del Web » Programando para Internet » PHP »

Duda con script de descarga

Estas en el tema de Duda con script de descarga en el foro de PHP en Foros del Web. Estuve revisando las FAQ's y me encontré con un script para realizar descargas. La cosa es que lo he convertido en una función y me ...
  #1 (permalink)  
Antiguo 29/07/2004, 08:57
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Pregunta Duda con script de descarga

Estuve revisando las FAQ's y me encontré con un script para realizar descargas. La cosa es que lo he convertido en una función y me ha quedado así:
Código PHP:
 function Download($filename){
  
$headers $_SERVER['HTTP_RANGE'];
  if (
$headers[Range]){
   
$pos=strpos ($headers[Range], "bytes=");
   
$pos2=strpos($headers[Range],"-");
   
$bytes=substr ($headers[Range], $pos+strlen("bytes="),$pos2-($pos+strlen("bytes=")));
  }else{
   
$bytes=0;
  }
  
settype ($bytes"integer");
  
$tarchivo=filesize($filename) - $bytes;
  
$ttotal=filesize($filename);
  
error_reporting(0);
  
header("Last-Modified: " gmdate("D, d M Y H:i:s T"filemtime($filename)));
  
header("Accept-Ranges: bytes");
  
header("Content-Length: "$tarchivo);
  
header("Content-Disposition: attachment; filename="."archivo.exe");
  
header("Content-Range: bytes ".$bytes."-".($ttotal-1)."/".$ttotal);
  
header("Content-Type: application/octet-stream");
  
$fp fopen($filename,'rb');
  if (!
$fp) {
   echo 
"Error abriendo el archivo $filename";
   exit();
  }
  
rewind ($fp);
  
fseek ($fp$bytes);
  if(!
fpassthru($fp)) {
   echo 
"Error de salida";
   exit();
  }
  
header("Connection: close");
  exit();
 } 
lo que quiero hacer y no se como es poner el nombre real al archivo, o sea, cuando trato de descargar cualquier archivo por ejemplo file01.zip me lo trata de de descargar pero me le pone por defecto a la descarga archivo.exe y lo que quiero que ponga es file01.zip. Probe de esta forma:
Código PHP:
header("Content-Disposition: attachment; filename=".$filename.""); 
pero entonces me pone el nombre de la pagina en cuestion o sea descarga.php
me ayudan a ver que pasa?
Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 29/07/2004, 10:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Esta es la cabecera HTTP para indicar que nombre va a tomar tu archivo a ofrecer para "descargar":

header("Content-Disposition: attachment; filename=".$filename);

Si usas basename() para tomar sólo el nombre del archivo (por si tiene ruta) sería lo ideal:

header("Content-Disposition: attachment; filename=".basename($filename));

Por lo demás .. no todo navegador se comporta igual ante estas cabeceras .. Prueba otros navegadores y observa.

Un saludo,
  #3 (permalink)  
Antiguo 29/07/2004, 13:34
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Cluster

He probado eso que me has explicado pero me sigue haciendo lo mismo, o sea, en vez de descargarme el fichero comprimido me descarga el script PHP. Estoy usando IExplorer 6

Salu2
__________________
Ing. Reynier Pérez Mira
  #4 (permalink)  
Antiguo 29/07/2004, 13:57
Avatar de susaniux  
Fecha de Ingreso: diciembre-2002
Mensajes: 21
Antigüedad: 15 años
Puntos: 0
Hola:

Ami me pasa exatamente lo mismo, y puse la parte de basename() y si me funciono, pero falta probar en diferentes navegadores que ocurre, tambien quise ponerlo como simple link a ese archivo y tambien me aparece el dialogo de descarga pero probandolo en otro navegador me lo interpretaba en la misma pantalla(Intento descargar archivos en word o txt).

Existe otra manera de hacr descarga de archivos?
__________________
:-P*****;-)
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 15:13.