Force to download a file in PHP
In this tutorial we have simple script to download files by force instead of open it in browser window. This is useful for common file types that would normally be displayed in a browser .csv, .php and all types of images( gif, png, jpg etc. ).
[wpdm_file id=7]
PHP Code
Simple PHP function function.php
<?php function output_file($Source_File, $Download_Name, $mime_type='') { /* $Source_File = path to a file to output $Download_Name = filename that the browser will see $mime_type = MIME type of the file (Optional) */ if(!is_readable($Source_File)) die('File not found or inaccessible!'); $size = filesize($Source_File); $Download_Name = rawurldecode($Download_Name); /* Figure out the MIME type (if not specified) */ $known_mime_types=array( "pdf" => "application/pdf", "csv" => "application/csv", "txt" => "text/plain", "html" => "text/html", "htm" => "text/html", "exe" => "application/octet-stream", "zip" => "application/zip", "doc" => "application/msword", "xls" => "application/vnd.ms-excel", "ppt" => "application/vnd.ms-powerpoint", "gif" => "image/gif", "png" => "image/png", "jpeg"=> "image/jpg", "jpg" => "image/jpg", "php" => "text/plain" ); if($mime_type==''){ $file_extension = strtolower(substr(strrchr($Source_File,"."),1)); if(array_key_exists($file_extension, $known_mime_types)){ $mime_type=$known_mime_types[$file_extension]; } else { $mime_type="application/force-download"; }; }; @ob_end_clean(); //off output buffering to decrease Server usage // if IE, otherwise Content-Disposition ignored if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); header('Content-Type: ' . $mime_type); header('Content-Disposition: attachment; filename="'.$Download_Name.'"'); header("Content-Transfer-Encoding: binary"); header('Accept-Ranges: bytes'); header("Cache-control: private"); header('Pragma: private'); header("Expires: Thu, 26 Jul 2012 05:00:00 GMT"); // multipart-download and download resuming support if(isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); list($range) = explode(",",$range,2); list($range, $range_end) = explode("-", $range); $range=intval($range); if(!$range_end) { $range_end=$size-1; } else { $range_end=intval($range_end); } $new_length = $range_end-$range+1; header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); header("Content-Range: bytes $range-$range_end/$size"); } else { $new_length=$size; header("Content-Length: ".$size); } /* output the file itself */ $chunksize = 1*(1024*1024); //you may want to change this $bytes_send = 0; if ($Source_File = fopen($Source_File, 'r')) { if(isset($_SERVER['HTTP_RANGE'])) fseek($Source_File, $range); while(!feof($Source_File) && (!connection_aborted()) && ($bytes_send<$new_length) ) { $buffer = fread($Source_File, $chunksize); print($buffer); //echo($buffer); // is also possible flush(); $bytes_send += strlen($buffer); } fclose($Source_File); } else die('Error - can not open file.'); die(); } ?>
Simple PHP file index.php
<?php include("function.php"); set_time_limit(0); $file_path="phpgang.csv"; output_file($file_path, 'phpgang.csv', 'application/csv'); ?>
Tutorial Categories:
Asslamoalaikum Thank you so much Hazrat Huzoor Bux sahab i really appreciate. Thank you once again..:)