Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/04/2008, 12:28
yconoclasta
 
Fecha de Ingreso: febrero-2005
Mensajes: 135
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta Problemas para forzar descarga

Qué tal:

Tengo problemas con un script para forzar la descarga de archivos. Al descargarlos, si son pesados, los archivos se descargan de manera parcial.

Creí que era el servidor, pero intenté descargarlos sin usar el script y se descargan completitos y sin problemas.

¿Qué ocurre?

Se supone que estoy especificando en las cabeceras el peso del archivo. El tipo de archivo que deseo descargar es MP3, solamente, y pesa más de 10 MB, se descargan sólo 4 o 5 o 6 MB.

Este es mi código:

Código PHP:
    $extensiones = array("mp3""doc""pdf""flv");
    
$f $_GET["file"];
    if(
strpos($f,"/")!==false){
        die(
"No es posible navegar por otros directorios");
    }
    
$ftmp explode(".",$f);
    
$fExt strtolower($ftmp[count($ftmp)-1]);
    
    if(
$f == ""){
        die(
"No se ha especificado ningún archivo para descargar");
    } elseif (!
in_array($fExt,$extensiones)){
        die(
"<strong>ERROR!</strong> no es posible descargar archivos con la extensión <strong>$fExt</strong>");
    } elseif (! 
file_exists($f)){
        die(
"<strong>ERROR!</strong> no se ha encontrado ningún archivo titulado <strong>$f</strong>");
    };

    switch( 
$fExt )
    {
      case 
"pdf"$ctype="application/pdf"; break;
      case 
"mp3"$ctype="audio/mpeg3"; break;
      case 
"zip"$ctype="application/zip"; break;
      case 
"doc"$ctype="application/msword"; break;
      case 
"xls"$ctype="application/vnd.ms-excel"; break;
      case 
"ppt"$ctype="application/vnd.ms-powerpoint"; break;
      case 
"gif"$ctype="image/gif"; break;
      case 
"png"$ctype="image/png"; break;
      case 
"jpg"$ctype="image/jpg"; break;
      default: 
$ctype="application/force-download";
    }

    
header("Pragma: public"); // required
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: private",false); // required for certain browsers 
    
header("Content-Type: $ctype");
    
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
    
header("Content-Disposition: attachment; filename=\"$f\"\n");
    
header("Content-Transfer-Encoding: binary");
    
header("Content-Length: ".filesize($f));
    
readfile("$f");
    exit(); 
Gracias de antemano.