Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    111

    [php] intercettare il download

    Salve a tutti, mi servirebbe per cortesia una cosa credo abbastanza semplice ma che non so come fare: In un sito devo mettere un elenco di documenti word scaricabili. Sto utilizzando php e la lista è abbastanza semplice (elenco dei doc su db e doc su una directory). Quando l'utente clicca sul documento
    documento in automatico parte il download.
    Ora a me servirebbe eseguire l'aggiornamento di un contatore di download e non so come intercettare il tutto. Mi date una mano? Grazie a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    1,141
    Un po di tempo fa avevo fatto una cosa del genere (utilizzando anche del codice trovato su questo forum)forzandogli il download.
    Spiego meglio:
    nella pagina dove ho l'elenco dei file,x ognuno di questi
    creo il link che mi apre la pagina download_page.php che sarebbe quella che forza il download e gli passo valori che mi serviranno per fare la query di aggiornamento: il nome del file,il suo ID e il numero di click fatti finora.

    &IDfile=<?php echo $IDfile; ?>&NumClick=<?php echo $NumClick; ?>')"> mio file


    ///////////////////////////////////////////////////////////

    *********** download_page.php ***************
    <?php

    $NewNumClick = $_GET['NumClick']+1;
    $sql = "UPDATE tabella SET countclick='".$NewNumClick."' WHERE IDfile='".$_GET['IDfile']."'";
    mysql_query($sql);

    $path_assoluto = "/tuo/path";
    $dimensione = filesize($path_assoluto."/".$_GET['f']);

    $filename = basename($_GET['f']);

    if(ereg("MSIE ([0-9].[0-9]{1,2})", $_SERVER["HTTP_USER_AGENT"])) {
    header("Content-Type: application/octetstream");
    header("Content-Disposition: attachment; filename=$filename");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: public");
    header("Content-Length: $dimensione");
    } else {
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=$filename");
    header("Expires: 0");
    header("Pragma: no-cache");
    header("Content-Length: $dimensione");
    }


    $Path = $path_assoluto."/".$_GET['f'];
    readfile($Path);
    fclose($fp);

    ?>

    prova cosi...
    ciao

  3. #3
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    La parola d'ordine quando si parla di contatori è sempre reindirizzamento

    Invece di linkare direttamente a una pagina oppure ad un download linki a una pagina.php che elabora le informazioni, aggiorna i contatori quindi reindirizza alla pagina scelta.
    Il tutto avviene in modo 'istantaneo' senza che il client se ne accorga attraverso il Header("Location:url")

    Per esempio

    codice:
    href="download_manager.php?doc=testo.txt"
    In download_manager.php reindirizzi a testo.txt dopo aver aggiornato il contatore di 'testo.txt'.
    Eventualmente puoi fare in modo che download_manager.php se doc non è 'settato' reindirizzi alla pagina di download.
    Oppure download_manager.php potrebbe essere una pagina più evoluta che dia info sulla dimesnione del file, il toatale dei download, l'ultimo aggiornamento, ecc...con un link per tornare alle pagine precedenti...(vabbè...questi sono poi i dettagli!).







  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    111
    Innanzitututto, grazie. Vorrei capire, se possibile, la sequenza degli oggetti:

    al click richiamo downloadmanager.php

    downloadmanager.php

    1) aggiorna il contatore del documento selezionato (controlla, aggiorna l'eventuale db, etc etc)
    2) lancia il download con
    Header("Location:url")

    E' questo che non ho capito..... come si fa?

    GRAZIE!

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    1,141
    il download te lo lancia grazie agli headers che passi...
    prova il codice che ti ho postato sopra e fammi sapere se ti funziona...

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    111
    Ok, lo provo, GRAZIE. Volevo intanto "capirlo"

    Grazie infinite

  7. #7
    La parola d'ordine quando si parla di contatori è sempre reindirizzamento



    codice:
    href="download_manager.php?doc=testo.txt"
    Ciao,
    solo un'osservazione, occhio ai percorsi altrimenti, in un server mal configurato, l'utente potrebbe scaricare file a piacimento
    per favore NIENTE PVT TECNICI da sconosciuti

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    111
    Grazie del consiglio, per fortuna non sono file protetti... per ora....

  9. #9
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    Dai un'occhiata qui

    header manual su php.net

    in particolare al commento di aarondunlap

    Sono sicuro che ti sarà utile.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    111
    Grazie a TUTTI! Il codice postato FUNZIONA BENISSIMO!!!

    Di nuovo GRAZIE

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 © 2024 vBulletin Solutions, Inc. All rights reserved.