با explode می تونید تشخیص بدید
function Download($file)
{
if (!is_file($file))
{
die("<b>404 File not found!</b>") ;
}
$len = filesize ($file) ;
$filename = basename ($file) ;
$file_extension = strtolower(substr(strrchr($filename,"."),1)) ;
switch ( $file_extension )
{
case "pdf" : $ctype="application/pdf" ; break ;
case "exe" : $ctype="application/octet-stream" ; break ;
case "zip" : $ctype="application/zip" ; break ;
case "doc" : $ctype="application/msword" ; break ;
case "xls" : $ctype="application/vnd.ms-excel" ; break ;
case "ppt" : $ctype="application/vnd.ms-powerpoint" ; break ;
case "gif" : $ctype="image/gif" ; break ;
case "png" : $ctype="image/png" ; break ;
case "jpeg":
case "jpg" : $ctype="image/jpg" ; break ;
case "mp3" : $ctype="audio/mpeg" ; break ;
case "wav" : $ctype="audio/x-wav" ; break ;
case "mpeg":
case "mpg" :
case "mpe" : $ctype="video/mpeg" ; break ;
case "mov" : $ctype="video/quicktime" ; break ;
case "avi" : $ctype="video/x-msvideo" ; break ;
case "php" :
case "htm" :
case "html":
case "txt" : die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default : $ctype="application/force-download" ;
}
header ( "Pragma: public" ) ;
header ( "Expires: 0" ) ;
header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0") ;
header ( "Cache-Control: public" ) ;
header ( "Content-Description: File Transfer" ) ;
header ( "Content-Type: $ctype" ) ;
$header = "Content-Disposition: attachment; filename=".$filename.";" ;
header ( $header ) ;
header ( "Content-Transfer-Encoding: binary" ) ;
header ( "Content-Length: ".$len ) ;
@readfile( $file ) ;
exit;
}
if (isset($_GET['DLid'] ))
{
$dlid = (int) $_GET['DLid'] ;
if (isset($_SESSION['user']))
{
$file = $_SERVER['DOCUMENT_ROOT'].'/DLfiles/'.$esmeshoazDBbegir;
Download($file);
}else
{
echo 'اجازه دسترسی برای شما صادر نشده است';
}
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^userfile/([0-9]+).zip$ download.php?DLid=$1
</IfModule
فانکشن کامل دانلود :
}PHP:function Download($file) { if (!is_file($file)) { die("<b>404 File not found!</b>") ; } $len = filesize ($file) ; $filename = basename ($file) ; $file_extension = strtolower(substr(strrchr($filename,"."),1)) ; switch ( $file_extension ) { case "pdf" : $ctype="application/pdf" ; break ; case "exe" : $ctype="application/octet-stream" ; break ; case "zip" : $ctype="application/zip" ; break ; case "doc" : $ctype="application/msword" ; break ; case "xls" : $ctype="application/vnd.ms-excel" ; break ; case "ppt" : $ctype="application/vnd.ms-powerpoint" ; break ; case "gif" : $ctype="image/gif" ; break ; case "png" : $ctype="image/png" ; break ; case "jpeg": case "jpg" : $ctype="image/jpg" ; break ; case "mp3" : $ctype="audio/mpeg" ; break ; case "wav" : $ctype="audio/x-wav" ; break ; case "mpeg": case "mpg" : case "mpe" : $ctype="video/mpeg" ; break ; case "mov" : $ctype="video/quicktime" ; break ; case "avi" : $ctype="video/x-msvideo" ; break ; case "php" : case "htm" : case "html": case "txt" : die("<b>Cannot be used for ". $file_extension ." files!</b>"); break; default : $ctype="application/force-download" ; } header ( "Pragma: public" ) ; header ( "Expires: 0" ) ; header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0") ; header ( "Cache-Control: public" ) ; header ( "Content-Description: File Transfer" ) ; header ( "Content-Type: $ctype" ) ; $header = "Content-Disposition: attachment; filename=".$filename.";" ; header ( $header ) ; header ( "Content-Transfer-Encoding: binary" ) ; header ( "Content-Length: ".$len ) ; @readfile( $file ) ; exit; } if (isset($_GET['DLid'] )) { $dlid = (int) $_GET['DLid'] ; if (isset($_SESSION['user'])) { $file = $_SERVER['DOCUMENT_ROOT'].'/DLfiles/'.$esmeshoazDBbegir; Download($file); }else { echo 'اجازه دسترسی برای شما صادر نشده است'; }
این هم برای htaccess :
PHP:<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^userfile/([0-9]+).zip$ download.php?DLid=$1 </IfModule
case "php" :
case "htm" :
case "html":
case "txt" : die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
default : $ctype="application/force-download" ;
قسمتی که شما q کردین ، یه فیچر امنیتی هست. یوزر شما که نباید بتونه فایل های اسکریپت شما رو دانلود بکنه.
قسمت default هم برای موقعی کاربرد داره که mime فایل شما ، یکی از کیس های بالا نباشه.
پارامتر default برای دستور switch ، تمامی کیس ها رو بررسی میکنه و اگر condition شما جز کیس ها نباشه از default استفاده میکنه.