404 File not found!"); } //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 "mp3": $ctype="audio/mpeg"; break; case "wav": $ctype="audio/x-wav"; break; case "wma": $ctype="audio/x-ms-wma"; break; case "ra": $ctype="audio/vnd.rn-realaudio"; break; case "ogg" : $ctype="application/ogg"; break; case "zip": $ctype="application/zip"; break; case "rar": $ctype="application/x-rar-compressed"; break; case "exe": $ctype="application/octet-stream"; break; case "mpeg": case "mpg": case "mpe": $ctype="video/mpeg"; break; case "mp4": $ctype="video/mp4"; break; case "mov": $ctype="video/quicktime"; break; case "wmv": $ctype="video/x-ms-wmv"; 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": default: die("Cannot be used for ". $file_extension ." files!"); } //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_chunked($file); //@readfile($file); } ?>