Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Download controllato

  1. #1
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220

    Download controllato

    Per forza di cose devo subito dire che questo script gira su un server Aruba con SO Windows (lo so...lo so...-_-').

    Ora io vorrei fare in modo che uno possa scaricare un file solo se registrato. Di conseguenza controllo ovviamente che si aloggato e che ne abbia i diritti e poi uso questo script:

    Codice PHP:
    function download($file$dir)
    {
        
    $dim filesize($dir.$file);
        
    $datafile $dir.$file;
        if(
    file_exists($datafile))
        {
            
    header("Content-Type: application; name=".$file);
            
    header("Content-Transfer-Encoding: binary");
            
    header("Content-Length: ".$dim);
            
    header("Content-Disposition: inline; filename=".$file);
            
    header("Expires: 0");
            
    header("Cache-Control: no-cache, must-revalidate");
            
    header("Cache-Control: private");
            
    header("Pragma: public");

            
    readfile($datafile);
        }
    }            

    download("prova.zip""_private"); 
    Lo script funziona perfettamente (infatti indirizza bene il download al file desiderato). Pero' per fare in modo che il file NON sia raggiungibile anche inserendo l'indirizzo assoluto nel browser, vorrei che fosse messo in una cartella privata. Al che ho provato a fare questo nella cartella _private che Aruba mette a disposizione, ma niente da fare...lo script va in timeout.
    Quindi vi chiedo come posso fare? Non potendo creare cartelle fuori dalla mia webdir, e non potendo usare il trucco del .htaccess, come posso fare?

    thx


  2. #2
    spero di sbagliarmi.. ma credo che il .htacces sia l'unica soluzione
    debian:~$ uname -r
    2.6.18-1-686
    debian:~$

    Il quiz manager è nato!!! visitate http://shenk.altervista.org !!

  3. #3
    sarà un metodo rudimentale e con parecchie limitazioni (se hai files grandi tutto questo discorso non regge), ma non puoi fare un banale "copia e incolla" in una cartella pubblica solo quando viene richiesto da un utente e poi cancellarlo dopo un tot di tempo (lo so, non puoi usare i crontab e c'è il rischio che l'utente stia ancora scaricando, ma se pensi bene ad un qualche algoritmo secondo me... magari cambiando il nome del file di volta in volta... boh! Io la sparo! :P)
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    209
    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!

  5. #5
    in effetti questa soluzione mi sembra migliore.. Tutte e due hanno delle pecche, ma la tua è decisamente più professionale
    Questa e' la mia firma! Lo so, e' una mezza schifezza.
    Un sito
    - skype non è per consulenze online -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.