The downloadFile() function presented in this page can be used to
force download various type of files with PHP: csv, doc, html, jpg, pdf, png, ppt, xls, xml, zip, etc..
The downloadFile() function
// function to download files with php ( https://coursesweb.net/php-mysql/ )
// receives the path and filename to download
function downloadFile($file) {
$ar_ext = explode('.', $file);
$ext = strtolower(end($ar_ext));
$extensions = array(
'bmp' => 'image/bmp',
'csv' => 'text/csv',
'doc' => 'application/msword',
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'exe' => 'application/octet-stream',
'gif' => 'image/gif',
'htm' => 'text/html',
'html' => 'text/html',
'ico' => 'image/vnd.microsoft.icon',
'jpeg' => 'image/jpg',
'jpe' => 'image/jpg',
'jpg' => 'image/jpg',
'pdf' => 'application/pdf',
'png' => 'image/png',
'ppt' => 'application/vnd.ms-powerpoint',
'psd' => 'image/psd',
'swf' => 'application/x-shockwave-flash',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'xhtml' => 'application/xhtml+xml',
'xml' => 'application/xml',
'xls' => 'application/vnd.ms-excel',
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'zip' => 'application/zip'
);
$ctype = isset($extensions[$ext]) ? $extensions[$ext] : 'application/force-download';
if (file_exists($file) && is_readable($file)) {
// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
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='. $file .';' );
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. filesize($file));
readfile($file);
}
else {
header('HTTP/1.0 404 Not Found');
echo "<h1>Error 404: File Not Found: <br /><em>$file</em></h1>";
}
}
Example of usage:
<?php
// HERE ADD THE downloadFile() function
$dir = 'download/'; // folder wth files for download
// $_GET['file'] contains the name and extension of the file stored in 'download/'
if (isset($_GET['file'])) {
$file = $dir . strip_tags($_GET['file']);
downloadFile($file);
}
?>