Limitare e controllare il download di files da web
12/06/2014In alcune situazioni ci viene richiesto di limitare il download di files e documenti ad utenti registrati e comunque mantenendo nascosto il percorso in cui è archiviato il file sul server web.
Una soluzione passa attraverso la memorizzazione in database del path e quindi le realizzazione del link via query di selezione sebbene questa soluzione, oltre ad obbligarci ad inserire nel db le coordinate del file non impedisca ad un utente esperto la visualizzazione del path.
L'alternativa che rende più semplice ed efficace la soluzione può essere questo breve script php (è necessario specificare nella definizione della variabile file il percorso):
$file = $_SERVER["DOCUMENT_ROOT"] . '/path/doc.ext';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
A questo punto basta puntare il link del download al file php sopra indicato ed il gioco è fatto!
Con poche righe di codice aggiuntive inoltre possiamo detectare l'IP di chi scarica, la data e quindi regsitrare tutti i 'movimenti' del documento in questione.