Potrebbe forse andarti bene questo sistema.
Due pagina: la prima controlla i dati dell'utente e incrocia i dati passati in get con il db.
La seconda scarica il file.
Devo dirti che le richiamo con un javascript e le imbosco in un iframe nella pagina stessa al volo i modo che non si veda nessun url.
download.php
Codice PHP:
<?php
session_start();
ob_start();
/*
Qui ci fai i controlli sull'utente e incroci i dati in get per ottenere $file_name dal DB
*/
header('Location: _download.php?filename='.$file_name);
?>
_download.php
Codice PHP:
<?php
if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/force-download");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-Disposition: attachment; filename=" . basename($_GET[filename]) );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($_GET[filename]));
@readfile($_GET[filename]);
?>
Ciao!