Ho implementato una soluzione simile su un sito Web di hosting di file.
Quello che vuoi fare è usare il callback register_shutdown_function che ti permette di rilevare la fine dell'esecuzione di uno script php indipendentemente dal risultato.
Quindi vuoi avere il tuo file in una posizione non accessibile sul web sul tuo server (s), e i tuoi download passano attraverso php: idea è che si vuole essere in grado di tenere traccia di quanti byte sono stati passati a il cliente.
Ecco un modo semplice di attuazione (ad esempio :)
<?php
register_shutdown_function('shutdown', $args);
$file_name = 'file.ext';
$path_to_file = '/path/to/file';
$stat = @stat($path_to_file);
//Set headers
header('Content-Type: application/octet-stream');
header('Content-Length: '.$stat['size']);
header('Connection: close');
header('Content-disposition: attachment; filename='.$file_name);
//Get pointer to file
$fp = fopen('/path/to/file', 'rb');
fpassthru($fp);
function shutdown() {
$status = connection_status();
//A connection status of 0 indicates no premature end of script
if($status == 0){
//Do whatever to increment the counter for the file.
}
}
>?
Ci sono ovviamente modi per migliorare, quindi se avete bisogno di maggiori dettagli o un altro comportamento, fatemelo sapere!
fonte
2010-02-24 21:48:26
Come si suppone che quei file siano grandi? Kb? Mb? <100 Mb? – Strae
DK-Wamp ha detto "Posso avere altri dettagli su questo argomento? // Ho provato a utilizzare questo script ma non ha funzionato per me. :(// So che è un argomento vecchio ma spero di trovare una soluzione. " – Veedrac