Originariamente inviato da FinalFantasy
.....cosa ti frega sapere se quello a finito di scarica o no?
Sto realizzando uno script per la gestione “sicura del download”, partendo dal principio che ogni url fornita a tale scopo è rintracciabile è che l'utente (loggato) potrebbe decidere di comunicare l'url del file ad altri e vanificare ogni tentativo di riservatezza, volevo duplicare il file in questione e restituire il file duplicato (UNA VOLTA TEMINATO IL DOWNLOAD) cancellare il file...
ed è a punto a questa fase che mi sono bloccato...
nel mio caso l'utilizzo di .htaccess e impensabile data la mole (1000 e +) file.

il “mio” script:


Codice PHP:
<?php 
function forceDownload( &$file ) {
    
/**
     * Function forceDownload:
     *    download any type of file if it exists and is readable
     * -------------------------------------
     * @author        Andrea Giammarchi
     * @date        18/01/2005 [13/04/2005]
     * @compatibility    PHP >= 4.3.0
     */
    
if( file_exists$file ) == true && is_readable$file ) == true ) {
        
$filename = &basename$file );
        if( 
strpos$_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== false ) {
            
$parsename = &explode'.'$filename );
            
$last count$parsename ) - 1;
            
$filename = &implode'%2E'array_slice$parsename0$last ) );
            
$filename .= '.'.$parsename[$last];
        }
        
$content = &file_get_contents$file );
        
header'Content-Type: application/octet-stream' );
        
header'Content-Disposition: attachment; filename="'.$filename.'"' );
        
header'Content-Length:'.strlen$content ) );
        
header'Content-Transfer-Encoding: binary' );
        echo 
$content;
        exit(
0);
    }
}
//*****************************|
function make_seed() { 
    list(
$usec$sec) = explode(' 'microtime()); 
      return (float) 
$sec + ((float) $usec 100000); 

function 
make_password($pass_len) { 
    
mt_srand(make_seed()); 
    
$password ""
    for (
$loop 0$loop $pass_len$loop++) { 
        switch(
mt_rand(02)) { 
            case 
0$password .= mt_rand(09);         break; // Number (0-9) 
            
case 1$password .= chr(mt_rand(97122)); break; // Alpha Lower (a-z) 
            
case 2$password .= chr(mt_rand(6590));  break; // Alpha Upper (A-Z) 
        

    } 
  return 
$password
}
//*****************************|
function temp_file$file_root$file_dir$file_name$file_type ) {
    
$file $file_root $file_dir $file_name;
    
$newfile $file_root $file_dir make_password(10) . $file_type;
    if (!
copy($file$newfile)) {
        echo 
"Copia di $file non riuscita ...\n";
    }
    
forceDownload($newfile);
}
//*****************************|

// Preset
    
$file_root $_SERVER["DOCUMENT_ROOT"];
    
$file_dir "/test_vari/Secure_download/my_file/";
    
$file_name "AnsiC.pdf";
    
$file_type substr($file_namestrrpos($file_name,chr(46)), strlen($file_name));
// chiamata
    
temp_file$file_root$file_dir$file_name$file_type );
    
?>


cichity74