- Home
- Categorie
- Coding e Sistemistica
- PHP
- script per nascondere l'url di download e strana incompatibilità tra browser
-
script per nascondere l'url di download e strana incompatibilità tra browser
Ho realizzato (seguendo alcuni suggerimenti reperiti nei forum) uno script di questo tipo per scaricare un file nascondendone la posizione reale.
header ("Content-type: $type");
header ("Content-length: $size");
header ("Pragma: public");
header ("Content-Description: PHP Generated Data");
header ("Content-Disposition: attachment; filename="$name"");
header ("Cache-Control: no-store, max-age=0, no-cache, must-revalidate");
header ("Cache-Control: post-check=0, pre-check=0", false);
header ("Cache-Control: private");Semplificando, io passo l'id allo script, che preleva da un db mysql l'url del file associato e procede con il download.
Lo script testato su Mac (Safari, Firefox) e su Linux Ubuntu/Fedora (Firefox) funziona normalmente.
Su Windows no: se clicco sul link di download da Firefox attende all'infinito la risposta del server (non va nemmeno in timeout).
Su Explorer 6 e 7 (lo so che sono antiquato, ma tant'è ) il download parte normalmente ma il file scaricato risulta danneggiato.Il comportamento mi sembra assai strano se non altro perché il dl dovrebbe essere avviato dal server (immagino), e quindi non capisco questa incompatibilità...
Spero che qualcuno sappia illuminarmi...
m.
-
@Ministry said:
header ("Content-type: $type");
header ("Content-length: $size");
header ("Pragma: public");
header ("Content-Description: PHP Generated Data");
header ("Content-Disposition: attachment; filename="$name"");
header ("Cache-Control: no-store, max-age=0, no-cache, must-revalidate");
header ("Cache-Control: post-check=0, pre-check=0", false);
header ("Cache-Control: private");Se hai riportato tutto lo script, manca il file, ossia la riga
readfile('path_del_file/nome_del_file.ext');
-
Anzitutto scusa per il ritardo con cui rispondo.
Lo script riportato è completo, anche se avevo fatto diverse prove aggiungendo anche la riga readfile (qui ho riportato solo la versione più breve e "pulita" per questioni di leggibilità).
In ogni caso se lo script funziona su alcuni sistemi dovrebbe funzionare su tutti...Comunque a forza di tentativi credo di aver capito che si tratta di un errore di sintassi. Difatti cambiando le righe
header ("Content-type: $type"); header ("Content-length: $size"); header ("Content-Disposition: attachment; filename=\"$name\""); ```in
header ("Content-type: ".$type);
header ("Content-length: ".$size);
header ("Content-Disposition: attachment; filename=".$name);Non capisco perché, però, visto che il codice php è gestito lato server, e quindi dovrebbe essere "trasparente" al client.
-
forse il problema vero era in questa riga:
header ("Content-Disposition: attachment; filename=\"$name\"");
in filename= non si deve inserire il nome tra virgolette