Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    Script per il download di file

    Buonasera a tutti,
    ho spesso notato, sul Web, dei link per il download di file che puntano ad uno script, passando l'ID del documento sulla querystring; cliccando sul link, si apre la finestra di download del file.
    A parte, ovviamente, la parte in cui si recupera l'ID e lo si usa come chiave di ricerca nel db per avere la locazione fisica del documento, qualcuno sa come sono fatti questi script?
    Inoltre: è possibile rendere una sottocartella di Apache accessibile ad un tale script, ma non direttamente, in modo che, per esempio, non sia possibile visualizzare il documento "pippo.doc" nella cartella "vendite" digitando semplicemente www.miosito.com/vendite/pippo.doc nella barra degli indirizzi?

  2. #2
    per il file puoi provare a cambiare il chmod della cartella.

    Per lo script di download mi pare che php debba mandare un'header particolare al client. Se trovo lo script te lo posto

  3. #3
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Per far scaricare il file prova a leggere qui:
    http://elouai.com/force-download.php
    Per evitare di accedere direttamente al file puoi usare il rewrite (se sei su Apache), reindirizzando tutte le richieste ad una determinata cartella ad una tua pagina.
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  4. #4
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Per evitare di accedere direttamente al file puoi usare il rewrite (se sei su Apache), reindirizzando tutte le richieste ad una determinata cartella ad una tua pagina.
    E supponendo che, come accade col 99.99% degli hoster, non possa usare mod_rewrite?

  5. #5
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Mah, in genere invece lo permettono tranquillamente, basta avere un hosting con Apache (che in genere sono più comuni di hosting con IIS). Devi creare/modificare il file .htaccess (con il punto iniziale) inserendo le regole di rewrite che ti servono.
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  6. #6
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Originariamente inviato da Leo15
    Mah, in genere invece lo permettono tranquillamente, basta avere un hosting con Apache
    OK
    Replay... il MIO hoster non ne vuole sapere di attivare mod_rewrite.
    Altre soluzioni?

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    29
    Bhe penso che fai upload tramite php, quindi utilizzando anche il db non vedo che problema ci sia a rinominare e criptare il nome del file per poi richiamarlo e rinominarlo per il download..

    non so tipo una roba del genere :
    Codice PHP:
    // Uppo il file
    if(move_uploaded_file($_FILES[file]['tmp_name'], "upload/".$_FILES[file][name])) {
        
    $hash sha1_file("upload/".$_FILE[file][name]); // Prendo l'hash
        
    rename("upload/".$_FILE[file][name], "upload/".$hash); // Rinomino

    Per poi rinominare si fa così :
    Codice PHP:
        // $d è il fetch della query se non si capisce
        
    header("Cache-Control: public, must-revalidate");
        
    header("Pragma: hack");
        
    header("Content-type: ".mime_content_type($d[base_name])); // Definisco il mime
        
    header("Content-Length: ".filesize($d[url])); // La dimensione
        
    header("Content-Disposition: attachment; filename=".$d[base_name]); // Il nuovo nome
        
    header("Content-Transfer-Encoding: binary");
        
    // Faccio scaricare il file
        
    $fp fopen($d[url], 'r');
        
    $buffer fread($fpfilesize($d[url]));
        
    fclose ($fp);
        print 
    $buffer
    Così dovresti anche evitare che scarichino i file con direct url, ammeno che non conoscano l'hash..
    Spero chiarisca i dubbi
    ( e spero di non aver fatto errori scrivendo :master: )

    Davide

  8. #8
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    puoi proteggere i file mettendo nella cartella un .htaccess con la direttiva:
    codice:
    <Files *>
    	Order Allow,Deny
    	Deny from all
    </Files>
    poi il file da scaricare lo recuperi in maniera simile a come postato da Dade, ma senza rinominarlo

    Codice PHP:
    <?php
    $path
    ='download/';
    $file 'prova.zip';
     
    if(!
    file_exists($path.$file) || !is_readable($path.$file)){
        die(
    'file not found');
    }else{
        
    header("Cache-Control: public");
        
    header("Content-Description: File Transfer");
        
    header("Content-Disposition: attachment; filename=".$file);
        
    header("Content-Type: application/zip");//da cambiare se il file è di tipo diverso
        
    header("Content-Transfer-Encoding: binary");
        
        
    readfile($path.$file);
    }
    ?>
    i file non sono accessibili via http, ma te li gestisci con il file php che si occupa del download

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.