Force File Download with PHP

If you want to control or track your downloadable contents then a force file downloader script can give you more option. Especially if you want make images or other stemming contents like music file (mp3, wav, ogg), video files (flv, mp4, ogg, 3gpp), css, JavaScripts or even a php file downloadable then you must need to use a force file downloader script.

In this post I am going to share a simple but useful force file downloader script.


Download Source

The Download Function

/**
 * force file to download
 * 
 * @param string path to file
 */
function download($path)
{
	// if file is not readable or not exists
	if (!is_readable($path))
		die('File does not exist or it is not readable!');

	// get file's pathinfo
	$pathinfo = pathinfo($path);
	// set file name
	$file_name = $pathinfo['basename'];

	// guess mime type by extension
	$mimes = require 'mimes.php';
	$mime = isset($mimes[$pathinfo['extension']]) ? $mimes[$ext] : 'application/octet-stream';

	// set headers
	header('Pragma: public');
	header('Expires: -1');
	header('Cache-Control: public, must-revalidate, post-check=0, pre-check=0');
	header('Content-Transfer-Encoding: binary');
	header("Content-Disposition: attachment; filename=\"$file_name\"");
	header('Content-Length: ' . filesize($path));
	header("Content-Type: $mime");

	// read file as chunk to reduce memory usages
	if ( $fp = fopen($path, 'rb') ) {
		ob_end_clean();

		while( !feof($fp) and (connection_status()==0) ) {
			print(fread($fp, 8192));
			flush();
		}

		@fclose($fp);
		exit;
	}
}

Heavy memory usages is one of the most common issue of almost all force file downloader script. That's why I am not using functions like readfile. Because these files first stores whole file to the memory and then it starts download. If you want to try large files to download using this function then you will get memory limit exhausted problem. So, it is better to read a file as chunks.


Usages

$file = $_GET['file'];
download('path/'. $file);

6 comments:

  1. Nice script! Thanks!

    ReplyDelete
    Replies


    1. Địa Ma Lão Nhân ngưng thân hình một lát phát hiện trước mặt không có người nào đuổi theo còn tưởng rằng có thể đào thoát ai ngờ mình dính phải một bình chướng vô hình ngăn cản.

      - Ngươi đừng hòng chạy thoát.

      Nhạc Thành đã xuất hiện sau lưng của Địa Ma Lão Nhân, ba vòng sáng xuất hiện xoay vòng.

      Ám Ảnh Kiếm đã sớm hiện ra trong tay của Nhạc Thành, ba luồng sáng mang theo lực lượng cường hãn mà phóng tới, Địa Ma Lão Nhân không có thân thể Kim Long như Nhạc Hạo, không có tốc độ như Trần Tân chỉ dongtam
      mu moi ra hom nay
      tim phong tro
      http://nhatroso.com/
      nhạc sàn
      tổng đài tư vấn luật
      văn phòng luật hà nội
      tổng đài tư vấn luật
      thành lập công ty trọn gói
      http://we-cooking.com/
      chém gió
      trung tâm tiếng anhcó thể lui lại vài phần.

      Đúng lúc Địa Ma Lão Nhân lui lại thì một hắc mang rất lớn gào thét, ở giữa không trung hoá thành cự trảo đen kịt, chộp tới ba Ám Ảnh Kiếm.

      - Phá cho ta.

      Thủ ấn của Nhạc Thành một lần nữa biến đổi, Âm Dương Kiếm ở giữa không trung hơi tản ra, lập tức biến thành một phương hướng không thể xác định được ngăn cản trước cự trảo.

      Delete
  2. Wow amazing i saw the article with execution models you had posted. It was such informative. Really its a wonderful article. Thank you for sharing and please keep update like this type of article because i want to learn more relevant to this topic.

    Web Designing Training in Chennai

    ReplyDelete

  3. Helpful as always. Every post you write produce a massive value to your readers that is the only reason it is so popular and has great authority. I read this content really awesome.I hope this information may change my business carrier.I can remember these things whenever taking the decision.


    SAP training in Chennai

    ReplyDelete

Go to top