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

También intenté cambiar por fopen, pero sigue sin funcionar. ¿Alguien sábe cuál puede ser la razón de esto? Sabiendo el porque creo que es más sencillo encontrar la solución.

Por lo que he buscado veo que el código es muy similar o identico al publicado en varios lugares referente a forzar descarga. No entiendo qué pasa.

aquí el código con las modificaciones:

Código PHP:
set_time_limit(0);
$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 
"exe"$ctype="application/octet-stream"; 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 
"jpeg":
    case 
"jpg"$ctype="image/jpg"; break;
    case 
"wmv"$ctype="video/wmv"; break;
    case 
"mpg":
    case 
"mpeg"$ctype="video/mpg"; break;
    case 
"avi"$ctype="video/x-msvideo"; break;
    case 
"mov"$ctype="video/quicktime"; break;
    case 
"mp3"$ctype="audio/mp3"; break;
    case 
"wav"$ctype="audio/x-wav"; break;
    default: 
$ctype="application/octet-stream"; break;
}

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));
ob_clean();
flush();
ob_flush();
$fp=fopen("$f""r");
fpassthru($fp);
//$contenido = fread($fp, filesize($f));
//fclose($fp);
//fpassthru($fp);
//readfile("$f");
exit();