Monday, April 30, 2012

Downloading a file forcibly using php


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

No comments:

Post a Comment

Please feel free to post your comments. If anyone has a good article or good thing to share, just send me that with your name to asadmehmoodstar@gmail.com. and if anyone want so receive updates regarding my blog, he can subscribe to my weekly newsletter on "Subscribe to our mailing list" section.

Thanks