• User Attivo

    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'è :tongueout:) 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.


  • Super User

    @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');


  • User Attivo

    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.

  • Super User

    forse il problema vero era in questa riga:

    
    header ("Content-Disposition: attachment; filename=\"$name\"");
    
    

    in filename= non si deve inserire il nome tra virgolette