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();