Wednesday, July 14, 2010

How to Add a file downloder to a website in PHP

1. use the following code to add file downloading funtionality to your web site.
2. To add multiple download buttons to your web site you must define seperate forms for each submit button and pass the file path as a hidden field.

$filename = $_GET['file'];

// required for IE, otherwise Content-disposition is ignored
ini_set('zlib.output_compression', 'Off');

// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));

if( $filename == "" )
echo "eLouai's Download ScriptERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath";
} elseif ( ! file_exists( $filename ) )
echo "eLouai's Download ScriptERROR: File not found. USE force-download.php?file=filepath";
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/"; break;
case "ppt": $ctype="application/"; 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));