Comment

Working with Files

Download a File

Estimated reading: 2 minutes 10 views Contributors

সারাংশঃ এই টিউটোরিয়ালে, আপনি শিখবেন কীভাবে PHP ব্যবহার করে readfile() ফাংশনের মাধ্যমে একটি ফাইল ডাউনলোড করবেন।

Introduction to the PHP readfile() function

readfile()ফাংশন একটি ফাইল থেকে ডেটা পড়ে এবং তা আউটপুট বাফারে লেখে।

এখানে readfile()ফাংশনের সিনট্যাক্স দেওয়া হলোঃ

readfile ( 
    string $filename , 
    bool $use_include_path = false , 
    resource $context = ? 
) : int|false

 readfile()ফাংশনের নিম্নলিখিত প্যারামিটারগুলি রয়েছেঃ

  • $filename হলো ফাইলটির path.
  • $use_include_path যদি true সেট করা হয়, তাহলে function include path-ফাইলটি খুঁজে বের করবে।
  • $context হলো স্ট্রিম কনটেক্সট নির্দিষ্ট করে।

readfile() ফাংশনটি যদি ফাইল থেকে সফলভাবে ডেটা পড়ে, তাহলে এটি বাইটের সংখ্যা ফেরত দেয়, অথবা ব্যর্থ হলে false ফেরত দেয়।

PHP download file example

নিম্নলিখিত উদাহরণটি দেখাচ্ছে কীভাবে readfile() ফাংশন ব্যবহার করে readme.pdf ফাইলটি ডাউনলোড করা যায়ঃ

<?php

$filename = 'readme.pdf';

if (file_exists($filename)) {
	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
	header('Expires: 0');
	header('Cache-Control: must-revalidate');
	header('Pragma: public');
	header('Content-Length: ' . filesize($filename));
	readfile($filename);
	exit;
}

PHP download file with a download rate limit

download rate limit করতে, আপনি নিচের স্ক্রিপ্টটি ব্যবহার করতে পারেনঃ

<?php

$file_to_download = 'book.pdf';
$client_file = 'mybook.pdf';

$download_rate = 200; // 200Kb/s

$f = null;

try {
	if (!file_exists($file_to_download)) {
		throw new Exception('File ' . $file_to_download . ' does not exist');
	}

	if (!is_file($file_to_download)) {
		throw new Exception('File ' . $file_to_download . ' is not valid');
	}

	header('Cache-control: private');
	header('Content-Type: application/octet-stream');
	header('Content-Length: ' . filesize($file_to_download));
	header('Content-Disposition: filename=' . $client_file);

	// flush the content to the web browser
	flush();

	$f = fopen($file_to_download, 'r');

	while (!feof($f)) {
		// send the file part to the web browser
		print fread($f, round($download_rate * 1024));

		// flush the content to the web browser
		flush();

		// sleep one second
		sleep(1);
	}
} catch (\Throwable $e) {
	echo $e->getMessage();
} finally {
	if ($f) {
		fclose($f);
	}
}

কীভাবে কাজ করেঃ

  1. প্রথমে, ডাউনলোড করার জন্য ফাইলের path  ($file_to_download) এবং ডাউনলোড হওয়া ফাইলের নাম ($client_file) সংজ্ঞায়িত করুন।
  2. এরপর, ডাউনলোড রেট ($download_rate) সংজ্ঞায়িত করুন এবং এটি ২০০ Kb/s তে সেট করুন।
  3. তারপর, যদি ফাইলটি না থাকে অথবা একটি সাধারণ ফাইল না হয়, তাহলে এক্সসেপশন throw করুন।
  4. এরপর, ফাইলের অংশটি পড়ুন এবং ১ সেকেন্ডের জন্য স্লিপ করুন যতক্ষণ না আরও ফাইল ডেটা পড়া যায়।
  5. অবশেষে, fclose() ফাংশন ব্যবহার করে ফাইলটি বন্ধ করুন।

সারাংশঃ

  • PHP তে  readfile() ফাংশন ব্যবহার করে একটি ফাইল ডাউনলোড করুন।

Leave a Comment

Share this Doc

Download a File

Or copy link

CONTENTS

Subscribe

×
Cancel