Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Controllo dei download in base all'IP

    Ciao a tutti.
    Ho bisogno di un una struttura di controllo da integrare in questo script:

    Codice PHP:
    <?  $download="miofile.rar";  
    header("Content-Type: application/force-download");  
    header("Content-Disposition: attachment; filename=" basename($download) );  
    readfile($download);  
    ?>
    Questo semplicissimo script non fa altro che inviare una richiesta di download al mio server.
    Funziona a meraviglia, ma è un grosso problema per la stabilità del mio server: chiunque potrebbe creare un bot per inviarmi un migliaio di richieste di download al secondo, e il server si schianterebbe in pochissimo tempo.

    Ho pensato quindi di inserire un controllo dei download in base all'IP, è solo che non conoscendo molto bene il PHP mi trovo un po' in difficoltà.

    Siccome ho a disposizione un db MySQL pensavo di fare una tabella con i campi IP, data e ora, e quando si carica la pagina prima di tutto controllo se il download è già stato effettuato (se sono già presenti i dati nella tabella), e fisso un limite di tempo.
    Per esempio: se non sono trascorsi almeno 60 secondi dall'ultimo download, quest'ultimo viene negato, e compare un messaggio di avvertimento.

    Mi aiutereste a realizzare questa cosa?

    ..naturalmente se avete idee migliori le ascolto volentieri

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    L'idea è perfetta.
    Su come connettersi al database e selezionare/modificare record trovi tonnellate di materiale sul sito.

    L'indirizzo IP del client lo trovi nella variabile superglobale $_SERVER['REMOTE_ADDR'].

    Buon lavoro, ciao
    Daniele
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Grazie per la risposta sono quasi riuscito ad ottenere quello che volevo, ma ho un problemino.

    Come posso fare per ottenere la differenza tra l'ultimo orario presente nel db, e l'ora locale?

    Per esempio: 15:32:29 - 15:30:00 = h:m:s?

    Ho pensato di usare time() per fare la differenza tra i 2 timestamp, quello locale e quello dell'ultimo record del db, e questa sarebbe una soluzione ottima. Solo che dovrei rifare la tabella...

    Conoscete una funzione per fare la differenza tra orari senza usare time()?

  4. #4
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Come salvi gli orari del download precedente nel DB?

  5. #5
    Così:
    Codice PHP:
    <?
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $data DATE("Y-m-d");
    $ora DATE("H:i:s");
    $inserimento mysql_query("
        INSERT INTO download(IP, DATA, ORA)
        VALUES('
    $ip', '$data', '$ora');
    "
    );
    ?>

  6. #6
    Faccio così:
    Codice PHP:
    <?
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $data DATE("Y-m-d");
    $ora DATE("H:i:s");

    $inserimento mysql_query("
        INSERT INTO download(IP, DATA, ORA)
        VALUES('
    $ip', '$data', '$ora');
    "
    );

    ?>

  7. #7
    Faccio così:
    Codice PHP:
    <?
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $data DATE("Y-m-d");
    $ora DATE("H:i:s");

    $inserimento mysql_query("
        INSERT INTO download(IP, DATA, ORA)
        VALUES('
    $ip', '$data', '$ora');
    "
    );

    ?>

  8. #8
    Faccio così:
    Codice PHP:
    <?
    $ip 
    $_SERVER['REMOTE_ADDR'];
    $data DATE("Y-m-d");
    $ora DATE("H:i:s");

    $inserimento mysql_query("
        INSERT INTO download(IP, DATA, ORA)
        VALUES('
    $ip', '$data', '$ora');
    "
    );

    ?>
    EDIT: scusate per i post multipli, avevo un problema col browser

  9. #9
    la data-ora all'interno del db la devi salvare in un unico campo. Hai due possibilità:
    1) (che è quella migliore) utilizzare un campo apposito, ad esempio DATETIME e valorizzarlo con la funzione mysql NOW();
    per fare poi la query di verifica devi utilizzare campo_con_date<=(NOW(), INTVAL 60 SECONDS)

    2) utilizzare un campo INT(10) e valorizzarlo con time() di php; per fare poi la query di verifica devi utilizzare campo_con_date<='time()-60'

  10. #10
    Grazie mille oly1982 è proprio quello che cercavo!

    Alla fine ho optato per la seconda possibilità (solo perché non avevo letto la tua risposta ), ma adesso ho un problema più grave...

    Inviando gli header all'inizio per "forzare" il download, poi non mi esegue tutto il resto dello script! E non so proprio come risolvere... avevo pensato di usare javascript al posto degli header, ma in questo caso non mi parte neanche il download...

    come posso risolvere?

    grazie ancora

    P.S.: ecco qui il codice per intero, se può servire a qualcuno

    Codice PHP:
    <?php

    $download
    ="miofile.pdf"
    header("Content-Type: application/force-download"); 
    header("Content-Disposition: attachment; filename=" basename($download) );
    readfile($download); 

    //acquisizione delle variabili
    $ip $_SERVER['REMOTE_ADDR'];
    $data DATE("Y-m-d");
    $ora DATE("H:i:s");
    $time time();

    //connessione al db
    include("connessione.php");

    //apertura del db
    $db mysql_select_db("dbname"$connessione);
    if (!
    $db) {
        die (
    "apertura del database non riuscita.");
    }

    //lettura dell'ultimo record della tabella download
    $ultimorecord mysql_query("
        SELECT IP, DATA, ORA, TIME, ID
        FROM download
        ORDER BY ID DESC LIMIT 1;
        "
    );
        
    $lettura mysql_fetch_row($ultimorecord);

    $ipd $lettura[0];
    $datad $lettura[1];
    $orad $lettura[2];
    $timed $lettura[3];
    $idd $lettura[4];

    //se l'ultimo record coincide con le variabili, nega il download
    if ($ip == $ipd && $data == $datad)  {
        
    $diff $time $timed;
        if (
    $diff 60) {
            
    $popup "Download negato.";
            echo 
    "<script type='text/javascript'>alert('$popup')</script>";
        }
    //altrimenti effettua il download
    } else {
        echo 
    "Download effettuato con successo."//in teoria il codice per forzare il download andrebbe qui
    }

    //inserimento delle variabili nel database
    $inserimento mysql_query("
        INSERT INTO download(IP, DATA, ORA, TIME)
        VALUES('
    $ip', '$data', '$ora', '$time');
    "
    );

    mysql_close($connessione);

    ?>

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.