Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Link download dinamici solo 24ore e no path.

    Salve!

    Vorrei chiedere se a qualcuno viene qualche idea su come creare link download dinamici, utilizzabili solo per tipo 24 ore e che non contengano direttamente il path del file..

    E' da un po' che ci sbatto la testa, ma niente di quello che creo/penso mi pare abbastanza giusto per poter essere implementato..

    La mia idea era, creo una pagina php, in cui li passo una stringa univoca per indicare il file da scaricare (diciamo l'id del file dentro il database), nel database ho i due campi che mi interessano, cioè la cartella e il nome file. Però qua mi blocco.. Se io faccio stampare queste due cose creando cliccando col destro potrei scoprire dove si trova il file ed essendoci dati riservati e privati, non voglio che un qualsiasi personaggio X si metta a giocare col mio server.

    tralasciando le mie paranoie, avete qualche idea su come procedere? Vi ringrazio!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il link lo fai del tipo
    <a href='script.php?id=id_del_file >scarica il file</a>

    in script.php: prendi l'id con $_GET['id'], con una query vai a pescare cartella e nome del file e sapendo questo avvii il download con

    $dimensione_file=filesize($file_da_scaricare);

    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=$file_da_scaricare");
    header("Content-Description: Download PHP");
    header("Content-Length: $dimensioni_file");
    readfile($nome_file);

    Non ho provato, ma dovrebbe funzionare.

  3. #3
    Originariamente inviato da Alhazred
    Il link lo fai del tipo
    <a href='script.php?id=id_del_file >scarica il file</a>

    in script.php: prendi l'id con $_GET['id'], con una query vai a pescare cartella e nome del file e sapendo questo avvii il download con

    $dimensione_file=filesize($file_da_scaricare);

    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=$file_da_scaricare");
    header("Content-Description: Download PHP");
    header("Content-Length: $dimensioni_file");
    readfile($nome_file);

    Non ho provato, ma dovrebbe funzionare.
    Ti confermo funziona perfettamente! Grazie

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Bene

  5. #5
    Originariamente inviato da operationexodus
    Ti confermo funziona perfettamente! Grazie

    Come non detto!

    credo non funzioni il readfile().

    Questo é quello che ho nel file php:

    $db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
    mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');


    $id=$_GET['id'];

    $sql = "SELECT cartellabackup, nomebackup, caricatobackup FROM tabellabackup WHERE id = '$id';";
    $res2 = mysql_query($sql) or die (mysql_error());

    $row=mysql_fetch_array($res2);
    // Questo mi serve per calcolare la grandezza del file, senza la necessità di collegarmi al server bpjwebsolution.
    $file_da_scaricare='/mnt/md1/salvato/'.$row['cartellabackup'].'/'.$row['nomebackup'];
    echo $file_da_scaricare;
    echo "
    ";
    // Qua ho l'indirizzo completo del file, ho creato una cartella prova e un file chiamato prova.zip
    // $downloadda="www.bpjwebsolution.it/salvato/".$row['cartellabackup'].'/'.$row['nomebackup'];
    // per comodità vi do già la path completa (quella che all'inizio dicevo che io non vorrei che nessuno sapesse)
    $downloadda="www.bpjwebsolution.it/salvato/prova/prova.zip";
    echo $downloadda;
    echo "
    ";
    $dimensione_file=filesize($file_da_scaricare);

    echo "dimensioni: ".$dimensione_file;
    if ($row['caricatobackup']==1){
    // ho commentato solamente perché così posso visualizzare l'output delle varie variabili! decomentare per visualizare il problema.
    /*
    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=".$row['nomebackup']);
    header("Content-Description: Download ");
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Length: $dimensioni_file");
    readfile("$downloadda");
    */
    }
    else {
    // questo viene visualizzato solamente se il file non è stato upload-dato completamente.
    echo "Ci dispiace, il download per il momento non è ancora disponibile per il download. Riprova più tardi.";

    }
    ?>


    Detto ciò, come risolvere questa cosa? :/

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Che errore ti da? Header already sent?
    In tal caso devi togliere tutti gli output (gli echo).
    La funzione header() funziona solo se non ci sono output prima della sua esecuzione.

  7. #7
    Originariamente inviato da Alhazred
    Che errore ti da? Header already sent?
    In tal caso devi togliere tutti gli output (gli echo).
    La funzione header() funziona solo se non ci sono output prima della sua esecuzione.
    Provo, anche se mi permette di fare il download del file, solo che il file è di 0byte! cioè vuoto.. cmq ti dico subito se è così..

  8. #8
    Originariamente inviato da operationexodus
    Provo, anche se mi permette di fare il download del file, solo che il file è di 0byte! cioè vuoto.. cmq ti dico subito se è così..
    No, non va neppure così. ti riposto il codice pulito dagli echo:

    $db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
    mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');


    $id=$_GET['id'];

    $sql = "SELECT cartellabackup, nomebackup, caricatobackup FROM tabellabackup WHERE id = '$id';";
    $res2 = mysql_query($sql) or die (mysql_error());

    $row=mysql_fetch_array($res2);

    $file_da_scaricare='/mnt/md1/salvato/'.$row['cartellabackup'].'/'.$row['nomebackup'];
    $downloadda="http://www.bpjwebsolution.it/salvato/".$row['cartellabackup'].'/'.$row['nomebackup'];
    $dimensione_file=filesize($file_da_scaricare);
    if ($row['caricatobackup']==1){

    header("Content-type: Application/octet-stream");
    header("Content-Disposition: attachment; filename=12354");
    header("Content-Description: Download ");
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Length: $dimensioni_file");
    readfile("$downloadda");

    }
    else {
    echo "Ci dispiace, il download per il momento non è ancora disponibile per il download. Riprova più tardi.";

    }
    ?>

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    readfile("$downloadda");

    prova senza i doppi apici
    readfile($downloadda);

  10. #10
    Originariamente inviato da Alhazred
    readfile("$downloadda");

    prova senza i doppi apici
    readfile($downloadda);
    Avevo provato di tutto, alla fine sono arrivato alla conclusione che non gli posso passare l'indirizzo del sito completo, ma devo richiamare lo script dal server dove risiedono i file!

    In questo caso funziona perfettamente.

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.