En el index tienes algo así:
Código HTML:
<A HREF="download.php?file=000184">ejemplo 1.pdf</A>
<A HREF="download.php?file=000312">ejemplo 2.mp3</A>
y en 'download.php' este pseudo código:
Código PHP:
Autentifica y blah blah blah...
if( $hay_cookie_autentificada ) {
$filename_real = "";
$filename_en_disco = "";
if( isset($_GET['file']) ) {
$file_ID = $_GET['file'];
if( $file_ID != '' ) {
switch ( $file_ID ) {
case 000184:
$filename_real = "ejemplo 1.pdf";
$filename_en_disco = "xxxABCDEF_184"; // arbitrario
break;
case 000312:
$filename_real = "ejemplo 2.mp3";
$filename_en_disco = "xxxABCDEF_312"; // arbitrario
break;
default:
break;
}
}
}
if( $filename_real != "" AND $filename_en_disco != "" ) {
if( !file_exists($filename_en_disco) ) {
$filename_en_disco = "";
}
}
if( $filename_real != "" AND $filename_en_disco != "" ) {
$filetime = filectime($filename_en_disco);
$filesize = filesize($filename_en_disco);
$fp = fopen( $filename_en_disco, "rb" );
$filedata = fread($fp, $filesize);
fclose($fp);
header("Cache-control: max-age=31536000");
header("Expires: " . gmdate("D, d M Y H:i:s",time()+31536000) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",$filetime) . " GMT");
header("Content-disposition: inline; filename=$filename_real");
header("Content-Length: $filesize");
$extension=strtolower(substr(strrchr($filename_real,"."),1));
if ($extension=='gif') {
header('Content-type: image/gif');
} elseif ($extension=='jpg' or $extension=='jpeg') {
header('Content-type: image/jpeg');
} elseif ($extension=='png') {
header('Content-type: image/png');
} elseif ($extension=='pdf') {
header('Content-type: application/pdf');
} elseif ($extension=='mp3') {
header('Content-type: audio/mpeg');
} else {
header('Content-type: unknown/unknown');
}
echo $filedata; // envía el file
}
else {
El 'file_ID', está vacío o es inválido
}
}
else {
No autorizado
}
Nota que de lo que se trata es de que no sepa qué nombre tiene el file en el disco, nombre que tú conoces, obtienes (aquí con un CASE aunque puedes hacerlo con una base de datos) y es ese el file que le envías.