Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Download system

  1. #1

    Download system

    Molto spesso si vedono siti dove è possibile scaricare file o patch per i giochi, e mi sono sempre chiesto: "come si realizza un sistema di download come il loro in php?, sarà possibile?".
    Vi spiego cosa intendo

    vorrei riuscire a realizzare se possibile una cosa del genere:
    1. quando si clicca su di un file, vorrei far comparire un timer che dice per esempio, 30 secondi al download e poi parte il download. (questo nn credo sia difficile)
    2. vorrei limitare ogni utente ad un download per volta, cioè mentre sta scaricando un file non ne puo scaricare altri fino al termine di quello. (non riesco a capire come si puo fare una cosa del genere in php, sempre se si puo fare :P)
    3. sapere quante persone stanno scaricando, per esempio 10 utenti, e creare una sorta di coda per gli altri o magari dire quando riprovare a scaricare, con un tempo stimato.

    chi sa darmi una mano, magari anche solo su qualcuno di questi punti?
    il punto 2 è il piu importante.

    grazie
    Riko87
    My Web Site: www.wowwiki.it | under development

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709

    Re: Download system

    Ci sono molti modi, ecco un riferimento per UN modo...

    Originariamente inviato da Riko
    vorrei riuscire a realizzare se possibile una cosa del genere:
    1. quando si clicca su di un file, vorrei far comparire un timer che dice per esempio, 30 secondi al download e poi parte il download. (questo nn credo sia difficile)
    Questo si può fare in JavaScript (funzione setTimeout())

    Originariamente inviato da Riko
    2. vorrei limitare ogni utente ad un download per volta, cioè mentre sta scaricando un file non ne puo scaricare altri fino al termine di quello. (non riesco a capire come si puo fare una cosa del genere in php, sempre se si puo fare :P)
    il link di download deve richiamare uno script php cui passi un identificativo per decidere quale file inviare, dopodichè popoli una tabella in un db che funge da cache in cui registri l'id di sessione dell'utente, il download in corso e il timestamp e non ne attiva di nuovi finchè sono attivi i precedenti (uno solo): il timestamp serve per "annullare" la sessione in caso di caduta della connessione.

    Originariamente inviato da Riko
    3. sapere quante persone stanno scaricando, per esempio 10 utenti, e creare una sorta di coda per gli altri o magari dire quando riprovare a scaricare, con un tempo stimato.
    basta che conti il numero di record della tabella del db di cui sopra e per i tempi fai una stima rispetto al timestamp attuale

  3. #3

    Re: Re: Download system

    Originariamente inviato da eiyen
    il link di download deve richiamare uno script php cui passi un identificativo per decidere quale file inviare, dopodichè popoli una tabella in un db che funge da cache in cui registri l'id di sessione dell'utente, il download in corso e il timestamp e non ne attiva di nuovi finchè sono attivi i precedenti (uno solo): il timestamp serve per "annullare" la sessione in caso di caduta della connessione.

    basta che conti il numero di record della tabella del db di cui sopra e per i tempi fai una stima rispetto al timestamp attuale
    mi sapresti fare un esempio pratico così da aiutarmi a capire meglio?
    1. come faccio da un link a richiamare una funzione php?
    2. per popolare la tabella con quanto dettod a te non ci sono problemi, ma come faccio ad annullare la sessione quando cade la connessione o l'utente interrompe il download e soprattutto a deletare la row in questa tabella quando il download è terminato?
    My Web Site: www.wowwiki.it | under development

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    per richiamare lo script dal link fai qualcosa tipo:

    Codice PHP:
    [url="download.php?id=<?php print $id?>"]Scarica <?php print $descrizione?>[/url]
    supponendo che $id contenga un riferimento al file da scaricare e $descrizione la sua descrizione (puoi fare anche qui una tabella nel db in cui ogni recordo contiene id, file, descrizione e altre info sui file scaricabili, per esempio)

    per "annullare" la sessione ci sono molti modi, ma uno dei più semplici è questo: quando interroghi la tabella per conoscere le sessioni di download "attive" PRIMA fai un DELETE di tutte quelle il timestamp è superiore ad un timeout che decidi tu. Naturalmente esistono metodi molto più complessi e alcuni che tengono conto se in realtà il download è ancora in corso o meno, ma questa è una soluzione efficace per casi "semplici".

  5. #5
    capito grazie..
    per curiosità, quali sono questi metodi per vedere se un download è terminato o meno?
    magari dammi qualche indicazione se per te è diff spiegarlo, così google un po su internet e magari trovo qualche guida..
    My Web Site: www.wowwiki.it | under development

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    l'unico metodo davvero completo è scrivere un "download manager" (questa è la dicitura), cioè un sistema che si fa carico di gestire il download stesso (p.es. viene utilizzato anche quando si vuole creare un sistema di scaricamento che permetta di riprendere i download interrotti)... però sarebbe abbastanza complicato fare una cosa completa... al limite puoi cercare qualcosa di più semplice... vedi un po'

  7. #7
    ho trovato questo:

    Codice PHP:
    <?php
    $file 
    'monkey.gif';

    if (
    file_exists($file)) {
        
    header('Content-Description: File Transfer');
        
    header('Content-Type: application/octet-stream');
        
    header('Content-Disposition: attachment; filename='.basename($file));
        
    header('Content-Transfer-Encoding: binary');
        
    header('Expires: 0');
        
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        
    header('Pragma: public');
        
    header('Content-Length: ' filesize($file));
        
    ob_clean();
        
    flush();
        
    readfile($file);
        exit;
    }
    ?>
    funziona correttamente su firefox e google chrome, mentre su explorer mi scarica un file di 0kb
    funziona anche il fatto che ti fa scaricare un file epr volta, infatti se riclicchi il download non parte la seconda volta.

    solo che vorrei far visualizzare un messaggio quando si cerca di scaricare un secondo file mentre se ne sta gia scaricando uno

    qualcuno ha esperienza su questo sistema?
    My Web Site: www.wowwiki.it | under development

  8. #8
    sul sito di html.it c'è scritto quanto segue ed afferma che funziona con IE, invece no !!

    Codice PHP:
    header("Content-Type: application; name=WoWModelViewer_0.6.0.3_Win32_Release.zip".$nome_file);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$dimensione_file);
    header("Content-Disposition: inline; filename=".$nome_file);
    header("Expires: 0");
    header("Cache-Control: no-cache, must-revalidate");
    header("Cache-Control: private");
    header("Pragma: public");
     
    readfile($percorso_assoluto.$nome_file); 
    come devo fare a far scaricare ad ie il file con le corrette dimensioni, invece del solito 0kb ?
    help me pls
    My Web Site: www.wowwiki.it | under development

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.