Salve a tutti, frequento l'ultimo anno di ITIS Informatico, e come progetto per la maturità si dovrebbe portare qualcosa inerente al programma scolastico che è incentrato principalmente su siti web dinamici e basi di dati, dunque PHP ed SQL. L'idea cardine era quella di realizzare un sito web molto semplice che consentisse di caricare file sul proprio spazio, ma questi non sarebbero stati salvati in locale ma inviati ad Amazon, poggiandosi quindi sul servizio S3. Poco dopo sono subentrati problemi circa le policy e autorizzazioni varie unite ad una documentazione poco esplicativa e confusionaria, quindi ho deciso di abbandonare il progetto in corso d'opera; dunque ho pensato di riciclare l'idea ma salvando i file in locale e di appoggiare il sito su Altervista in modo che sia accessibile ovuque. Da pochi giorni sto sviluppando quest'ultima idea, quindi ho realizzato un piccolo sito, seppur ancora molto minimale e scarno, che permette ad un utente di salvare i file nella propria area. Il problema sorto, motivo per cui sono qui, è nato con uno script PHP di nome download.php (a cui fa riferimento un pulsante "Scarica" posto accanto al nome del file che l'utente ha salvato nel suo spazio) che servirebbe a far scaricare il relativo file anche quelli "comprensibili" al browser. A quanto pare, però, lo script scarica un file con nome ed estensione corretta, ma con contenuto modificato, contenente il sorgente html della pagina. Per schiarirsi le idee, il sito sta su mywebstorage.altervista.org
Il file downlod.php contiene:
Di cui, le prime due righe prendono il nome del file e del relativo utente che vengono passati tramite campi hidden, mentre la terza imposta il percorso del file. La directory di altervista è così organizzata: nella root ho i file del sito web, poi ho una cartella Uploads dentro cui ci sono cartelle relative agli utenti, al cui interno i file che ha caricato. Tutti i campi del sito sono passati tramite GET semplicemente per motivi di debug.
Il file downlod.php contiene:
$filename=$_GET["filename"];
$user=$_GET["user"];
$path="\uploads\$user\$filename";
readfile($path);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'";');//basename($file)
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($path));
//print "$path";
$user=$_GET["user"];
$path="\uploads\$user\$filename";
readfile($path);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'";');//basename($file)
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($path));
//print "$path";