This is a very important and useful topic and we
programmers normally need this kind of script in our websites etc. I wrote this
scripts and now I am going to share you this to my blog readers.
The idea behind this is to use php header parameters to do
this. Whenever you try to open some file which browser cant open (files like
.doc, .docx etc ) itself, browser prompts you a download window and will ask
you to download the file. This thing is done automatically by browser for some
file formats. But what will happen when you open a .html, or .php file using a
url? The answer to this is that browser will open or try to run these files in
the browser window. But if you want to just download the files and not to open them
in browser, then you have to tell php that download these files. This can be
done by using some php header settings. The class that I am using for this
thing is shown below.
<?php
session_start();
$path="";
$filename = $path.$_GET['file'];
// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));
if( $filename == "" )
{
echo "<html><body>ERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath</body></html>";
exit;
} elseif ( ! file_exists( $filename ) )
{
echo "<html><body>ERROR: File not found. USE force-download.php?file=filepath</body></html>";
exit;
};
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 "docx": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "xlsx": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "pptx": $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;
default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();
?>
you can download this script using this url
http://dl.dropbox.com/u/37908711/public_scripts/php_downloadfile.rar