
File download script for websites
Sometimes bloggers/webmasters want to share something with their users using download and therefore they put the link of the resource on their website so that users/visitors can download the resource. Mostly they point the link to the resource itself and therefore web browser tries to open it in itself.
Here is the example of the above explanation: Bitnol.
When you click on the link it will open the image in the browser. So, now the user has to save it using save option or ‘CTRL + S’ in Windows OS.
But this is not the correct way for providing your user to download any file. Yes, it is good for viewing images in the browser but still, the user has to save it.
Now the solution is below small PHP script which will handle all your downloads:
<?php
$file = $_GET['file'];
download_file($file);
function download_file($fullPath)
{
// Must be fresh start
if (headers_sent())
die('Headers Sent');
// Required for some browsers
if (ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
// File Exists?
if (file_exists($fullPath)) {
// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
// Determine Content Type
switch ($ext) {
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;
default:
die('Forbidden !!!');
}
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");
header("Content-Disposition: attachment; filename=\"" . basename($fullPath) . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
ob_clean();
flush();
readfile($fullPath);
} else {
die('File Not Found');
}
}
?>
Copy and save the above PHP script as ‘download.php’ (whatever name you want) and put it in your server. Now to download any file call it as follows:
http://YOURDOMAIN/download.php?file=PATH Where YOURDOMAIN = your actual domain name and PATH = path to the file to download
Now your download system is ready. You can add more security using session ids like creating a session token for each download so that no one can steal your bandwidth.