Tengo una pagina donde se pueden descargar archivos, y estoy contabilizando cuantas descargas han realizado, he seguido los consejos de otros post con respecto a esto, cree una base de datos con un campo para la direccion de los archivos, y otro para el contador, y envio la variable.
Hago la llamada a la pagina de descarga de la siguiente forma:
Código HTML:
<a href="download_radio.php?id=http://www.pagina.com/archivo.mp3">Programa de Radio</a>
y luego en la pagina de descargas, obtengo la variable por get, hago el select en la base de datos para incrementar el contador, actualizo la tabla y luego utilizo el codigo que esta en los comentarios de la pagina de php en la parte de headers para redireccionar a la descarga.
en $ruta esta la direccion que obtuve por GET, la coloco en $file por que en el codigo de direccionamiento utilizaban $file, en fin:
Este es ese codigo:
Código PHP:
$file=$ruta;
//Primero se verifica si la ruta existe. Problema aca, siempre dice que no existe, por eso lo quito.
//if (!is_file($file)) { die("<b>404 File not found!</b>"); }
//Separando y obteniendo informacion
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));
echo $filename;
//Se define el contenido-tipo mas apropiado para cada caso
switch( $file_extension ) {
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 "mp3": $ctype="audio/mpeg"; break;
case "wav": $ctype="audio/x-wav"; break;
case "mpeg":
case "mpg":
case "mpe": $ctype="video/mpeg"; break;
case "mov": $ctype="video/quicktime"; break;
case "avi": $ctype="video/x-msvideo"; break;
//Archivos que no son descargables (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default: $ctype="application/force-download";
}
//Excribiendo cabeceras
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
//Se define el Content-Type generado en el select - case
header("Content-Type: $ctype");
//Para forzar que sea una descarga y no un reconocimiento de archivo...
$header="Content-Disposition: attachment; filename=".$filename.";";
header($header);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$len);
@readfile($file);
En resumen es como si no me dejara realizar dos descargas seguidas por que aparece el error de la pagina llena de caracteres.
Por que puede estar pasando esto??, cual podria ser la solucion, sera que no puedo hacer dos GET seguidos a la misma variable, no se, no entiendo por que sucede eso.
Por otro lado he visto que si descargo un archivo y le doy a actualizar pagina (donde estan los link a descargar) y luego intento descargar otro si me lo deja hacer.
He intentado poner un direccionamiento desde la pagina de descarga que me devuelva a la pagina donde estan los link pero si lo hago no lanza el cuadro de dialogo de descarga.