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

    WRAPPER per calcolo Download

    Ciao ragazzi, avrei bisogno di un aiuto su una questione ardua che, nonostante la mia lunga esperienza da programmatore php, non riesco a risolvere.
    L'obiettivo è quello di contare il numero di download dei file da parte degli utenti di una mia community/areaprivata. Qualè il problema ??
    Avrei bisogno di un contatore piu professionale e attendibile possibile, quindi non vorrei utilizzare la scrittura su file di testo o su DB, quantomeno non nel modo classico(incremento una variabile o un campo e fornisco il link all'utente). In pratica dovrei contare SOLO I DOWNLOAD CONCLUSI CON SUCCESSO e inserire nel db il record di avvenuto download SOLO quando il client ha terminato di scaricare TUTTO IL FILE CON SUCCESSO.
    La soluzione dovrebbe trovarsi in qualche wrapper per la gestione dei flussi utente che mi permetta di gestire il flusso di download del file e incrementare il mio contatore dopo la chiusura con successo di tale flusso. Ma come si fa tutto ciò ??
    sapete indicarmi qualche risorsa cartacea o sul web in grado di risolvere questo mio problema ??
    Meglio ancora se avete subito la soluzione e siete in grado di illuminarmi con un po di codice.

  2. #2
    Ci sono due principali problemi da tenere presente:

    1. L'utente potrebbe utilizzare un download manager, in qual caso, come gestisci la cosa? (es. sessioni, track sull'IP, cookie, etc.)

    2. Una volta inviato lo stream al web server, non c'è molto che il PHP possa fare per sapere se il download è andato realmente a buon fine.

    Per il primo problema è solo una questione di scelta.

    Il secondo caso è più complesso. Un metodo per ovviarlo parzialmente è implementare la funzione readfile tramite fopen() etc. e disabilitare la direttiva ignore_user_abort. In questo modo, se l'utente termina il download precocemente, hai modo di tracciare l'errore. In ogni caso dovresti implementare un tipo di "download throttler" ad esemio inserendo una chiamata usleep()/flush() all'interno del ciclo while(!feof($handle)) in modo da assicurarti che i dati vengano inviati al client e non mantenuti nel buffer del web server.

    Una alternativa è creare un mini web server in PHP che gestisce direttamente le richieste HTTP per il download dei file. Per finire, forse esiste qualche modulo di Apache che logga il download dei file ed include un flag per indicare se è avvenuto completamente.

  3. #3
    Ti ringrazio...
    per il punto1 nessu problema...verifico le credenziali tramite autenticazione session/mysql

    punto2.
    Ma quindi in realtà non posso verificare in nessun modo il completo download del file ??!! Avevo gia pensato all'uso di fopen fread e fwrite sul buffer di output per inviare tutto il file all'utente. Non avevo pensato all'utilizzo di flush() per aggirare la bufferizzazione.
    Tuttavia quindi, trovandomi su tcp, che esegue bufferizzazione e temporizzazione autonomamente non posso assicurarmi dell'avvenuto download con successo del file.

    Forse la reale soluzione è quella del webserverHttp anche se immagino sia una realizzazione abbastanza complessa. Per quanto riguarda eventuali moduli di apache dovrò documentarmi...
    ti ringrazio ancora per la risposta, se qualcuno ha sotto mano qualche risorsa inerente al problema, la posti qui...

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.