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( $parsename, 0, $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(0, 2)) {
case 0: $password .= mt_rand(0, 9); break; // Number (0-9)
case 1: $password .= chr(mt_rand(97, 122)); break; // Alpha Lower (a-z)
case 2: $password .= chr(mt_rand(65, 90)); 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_name, strrpos($file_name,chr(46)), strlen($file_name));
// chiamata
temp_file( $file_root, $file_dir, $file_name, $file_type );
?>