Hola,
Tal vez si a este sistema:
http://shockly.com/demo_downloads/ le implementas tu validación para descarga, te resuelva el asunto.
Un saludo.
El 'index.php':
Código PHP:
<?php
/*
03/12/2005
*/
//------------------------------------------------------------------------------------------
// Definiciones
error_reporting( E_ALL ^ (E_NOTICE | E_WARNING) );
//------------------------------------------------------------------------------------------
// main
echo"<html>\n\r";
echo"<head>\n\r";
echo" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n\r";
echo"<style type=\"text/css\"><!--\n\r";
echo".small { font: 11px verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; }\n\r";
echo"--></style>\n\r";
echo" <title>demo</title>\n\r";
echo" <!-- no cache headers -->\n\r";
echo" <meta http-equiv=\"Pragma\" content=\"no-cache\">\n\r";
echo" <meta http-equiv=\"no-cache\">\n\r";
echo" <meta http-equiv=\"Cache-Control\" content=\"no-cache\">\n\r";
echo" <meta http-equiv=\"Expires\" content=\"0\">\n\r";
echo" <!-- end no cache headers -->\n\r";
echo" <meta http-equiv=\"MSThemeCompatible\" content=\"Yes\">\n\r";
echo" <link rel=\"SHORTCUT ICON\" href=\"favicon.ico\"> \n\r";
echo"</head>\n\r";
echo"<BODY bgcolor=\"#D5D5D5\" text=\"#000000\" id=\"all\" leftmargin=\"10\" topmargin=\"10\" marginwidth=\"10\" marginheight=\"10\" link=\"#000020\" vlink=\"#000020\" alink=\"#000020\">\n\r";
echo"<P><H1><CENTER>demo</CENTER></H1></P>\n\r";
echo"<BR>\n\r";
echo"<LI class=\"small\"><a href=\"../\">Volver</a></LI>\n\r";
echo"<HR>\n\r";
echo"<PRE>\n\r";
echo" <IMG SRC=\"mp3.gif\" ALT=\"[TXT]\"> <A HREF=\"download.php?f=01\">Mike Curb Congregation - Burning Bridges.mp3</A> 2.5 Mb (02:43)\n";
echo" <IMG SRC=\"zip.gif\" ALT=\"[TXT]\"> <A HREF=\"download.php?f=02\">sources_demo_downloads.zip</A> 2.3 Kb\n";
echo"</PRE><HR>\n\r";
echo( "<center><small>" );
echo 'o0o<br>';
echo( "</small></center>" );
echo( "</BODY>" );
echo( "</html>" );
//------------------------------------------------------------------------------------------
// end
?>
El 'download.php':
Código PHP:
<?php
/*
03/12/2005
*/
//------------------------------------------------------------------------------------------
// Definiciones
error_reporting( E_ALL ^ (E_NOTICE | E_WARNING) );
//------------------------------------------------------------------------------------------
// main
$filename_real = "";
$filename_en_disco = "";
if( isset($_GET['f']) ) {
$source_file = $_GET['f'];
if( $source_file != '' ) {
switch ( $source_file ) {
case 1:
$filename_real = "Mike Curb Congregation - Burning Bridges.mp3";
$filename_en_disco = "123456789_abcdefghijklmnopqrstuvwxyz";
break;
case 2:
$filename_real = "sources_demo_downloads.zip";
$filename_en_disco = "xxx456xxx_abcdefghijklmnopqrstuvwxyz";
break;
default:
break;
}
}
}
// -----------------------------------------------------
// Insertar aquí la validación del usuario para descarga
$is_valid_user = true;
// -----------------------------------------------------
if( $filename_real != "" AND $filename_en_disco != "" ) {
if( !file_exists($filename_en_disco) ) {
$filename_en_disco = "";
}
}
if( $is_valid_user && $filename_real != "" && $filename_en_disco != "" ) {
$filetime = filectime($filename_en_disco);
$filesize = filesize($filename_en_disco);
$fp = fopen( $filename_en_disco, "rb" );
$filedata = fread($fp, $filesize);
fclose($fp);
header("Cache-control: max-age=31536000");
header("Expires: " . gmdate("D, d M Y H:i:s",time()+31536000) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",$filetime) . " GMT");
header("Content-disposition: attachment; filename=\"$filename_real\"\n\n");
header("Content-Length: $filesize");
$extension=strtolower(substr(strrchr($filename_real,"."),1));
if ($extension=='gif') {
header('Content-type: image/gif');
} elseif ($extension=='jpg' or $extension=='jpeg') {
header('Content-type: image/jpeg');
} elseif ($extension=='png') {
header('Content-type: image/png');
} elseif ($extension=='pdf') {
header('Content-type: application/pdf');
} elseif ($extension=='mp3') {
header('Content-type: audio/mpeg');
} else {
header('Content-type: unknown/unknown');
}
echo $filedata;
}
else {
;
}
//------------------------------------------------------------------------------------------
// end
?>