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);
}
?>

Daily Test with Code Example

HTML
CSS
JavaScript
PHP-MySQL
Click on the HTML tag which creates an horizontal line in web page.
<br /> <em> <hr />
Some content ...
<hr />
Content under line ...
Which CSS property defines the text color?
font-style font-variant color
h2 {
  color: #cbdafb;
}
Click on the function which searches if a character, or text exists in a string.
indexOf() toString() split()
var str = "Web courses - http://CoursesWeb.net/";
if(str.indexOf("http://") == -1) alert("http:// isn`t in string");
else alert("http:// is in string");
Which function splits a string into an array of strings based on a separator?
array_merge() explode() implode()
$str = "apple,banana,melon,pear";
$arr = explode(",", $str);
var_export($arr);      // array (0=>"apple", 1=>"banana", 2=>"melon", 3=>"pear")
Force Download files with PHP

Last accessed pages

  1. Making DIV Contents Scroll Horizontally, with multiple Div`s inside (36999)
  2. Select in MySQL, Output results in HTML Table (10375)
  3. Wake Up! (4028)
  4. Styling link buttons using a Single Image and CSS (1891)
  5. Define Custom List-item Markers, Bullets for UL, OL Lists (4172)

Popular pages this month

  1. Making DIV Contents Scroll Horizontally, with multiple Div`s inside (1084)
  2. Contact page - CoursesWeb (1055)
  3. Tabs effect with CSS (1051)
  4. Courses Web: PHP-MySQL JavaScript Node.js Ajax HTML CSS (453)
  5. PHP getElementById and getElementsByTagName (332)