1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <? //First, see if the file exists if (! is_file ( $file )) { die ( "<b>404 File not found!</b>" ); } //Gather relevent info about file $len = filesize ( $file ); $filename = basename ( $file ); $file_extension = strtolower ( substr ( strrchr ( $filename , "." ),1)); //This will set the Content-Type to the appropriate setting for the file 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 ; //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files) case "php" : case "htm" : case "html" : case "txt" : die ( "<b>Cannot be used for " . $file_extension . " files!</b>" ); break ; default : $ctype = "application/force-download" ; } //Begin writing headers 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" ); //Use the switch-generated Content-Type header( "Content-Type: $ctype" ); //Force the download $header = "Content-Disposition: attachment; filename=" . $filename . ";" ; header( $header ); header( "Content-Transfer-Encoding: binary" ); header( "Content-Length: " . $len ); @readfile( $file ); exit ; ?> |