MySQLi ব্যবহার করে আপনি ডেটাবেসের মাধ্যমে ফাইল আপলোড, রিড, এবং ডাউনলোড করতে পারেন। সাধারণত, ফাইলগুলি ডেটাবেসে BLOB (Binary Large Object) ফিল্ডের মাধ্যমে সঞ্চিত করা হয় এবং পরে সেগুলি রিড বা ডাউনলোড করা হয়। এই প্রক্রিয়াটি একটি ওয়েব অ্যাপ্লিকেশনে ফাইল ম্যানেজমেন্টের জন্য খুবই কার্যকর।
1. ফাইল আপলোড করা MySQLi ডেটাবেসে
ফাইল আপলোড করার জন্য প্রথমে HTML ফর্মের মাধ্যমে ফাইলটি ইউজারের কাছ থেকে নেওয়া হয়, তারপর PHP স্ক্রিপ্টের মাধ্যমে MySQLi ডেটাবেসে সেভ করা হয়।
উদাহরণ:
<?php
// ডেটাবেস কানেকশন তৈরি
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ফাইল আপলোডের জন্য ফর্ম প্রক্রিয়া
if (isset($_POST['submit'])) {
// ফাইল ইনপুট
$file = $_FILES['fileToUpload']['tmp_name'];
$fileName = $_FILES['fileToUpload']['name'];
$fileContent = file_get_contents($file); // ফাইলের কনটেন্ট নেয়া
// SQL ইনসার্ট কোয়েরি
$stmt = $conn->prepare("INSERT INTO files (file_name, file_data) VALUES (?, ?)");
$stmt->bind_param("sb", $fileName, $fileContent); // "s" স্ট্রিং এবং "b" ব্লব ডেটার জন্য
$stmt->execute();
echo "File uploaded successfully!";
}
// ফাইল আপলোড ফর্ম
?>
<form action="" method="post" enctype="multipart/form-data">
Select file to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
<?php
$conn->close();
?>
ব্যাখ্যা:
$_FILES['fileToUpload']['tmp_name']দিয়ে ফাইলের সাময়িক পাথ নেওয়া হয়।file_get_contents()ফাংশন ব্যবহার করে ফাইলের কনটেন্ট ডেটাবেসে সেভ করার জন্য সংগ্রহ করা হয়।- ডেটাবেসে
file_dataকলামটি BLOB টাইপ হিসেবে তৈরি করা উচিত, যাতে বাইনারি ডেটা সঞ্চিত করা যায়।
2. ফাইল ডাউনলোড করা MySQLi ডেটাবেস থেকে
ফাইল ডাউনলোড করার জন্য, ডেটাবেস থেকে ফাইলের কনটেন্ট বের করে তা ইউজারের ব্রাউজারে পাঠাতে হবে। এটি HTTP হেডার ব্যবহার করে করা হয়, যাতে ফাইলটি ডাউনলোড হিসেবে চলে যায়।
উদাহরণ:
<?php
// ডেটাবেস কানেকশন তৈরি
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ফাইল আইডি দিয়ে ফাইল রিট্রিভ করা
$fileId = 1; // উদাহরণস্বরূপ, ID 1 এর ফাইল ডাউনলোড করা হবে
$stmt = $conn->prepare("SELECT file_name, file_data FROM files WHERE id = ?");
$stmt->bind_param("i", $fileId);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($fileName, $fileContent);
$stmt->fetch();
// HTTP হেডার ব্যবহার করে ফাইল ডাউনলোড করা
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . $fileName);
header("Content-Length: " . strlen($fileContent));
echo $fileContent; // ফাইল কনটেন্ট ব্রাউজারে পাঠানো
// সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
ব্যাখ্যা:
SELECT file_name, file_data FROM files WHERE id = ?এই কোয়েরি ব্যবহার করে ডেটাবেস থেকে নির্দিষ্ট ফাইল আইডি অনুযায়ী ফাইলের নাম এবং কনটেন্ট বের করা হয়।header()ফাংশন ব্যবহার করে ব্রাউজারকে জানানো হয় যে, এটি একটি ডাউনলোডযোগ্য ফাইল।Content-Type: application/octet-streamব্রাউজারকে জানায় যে এটি একটি বাইনারি ফাইল।Content-Disposition: attachmentনির্দেশ দেয় যে ফাইলটি ডাউনলোড করতে হবে, তা প্রদর্শিত হবে না।
3. ফাইল ডাউনলোডের নিরাপত্তা নিশ্চিত করা
ফাইল আপলোড এবং ডাউনলোডের সময় কিছু নিরাপত্তা ব্যবস্থা গ্রহণ করা উচিত, যেমন:
- ফাইল টাইপ চেক করা: নিশ্চিত করুন যে শুধুমাত্র নির্দিষ্ট ধরনের ফাইল (যেমন
.jpg,.pdf) আপলোড করা হচ্ছে। - ফাইল সাইজ চেক করা: অতিরিক্ত বড় ফাইল আপলোড হওয়ার আগেই সাইজ চেক করুন।
- SQL Injection থেকে বাঁচা: Prepared Statements ব্যবহার করে SQL Injection থেকে সুরক্ষা নিশ্চিত করুন।
ফাইল টাইপ এবং সাইজ চেক করার উদাহরণ:
<?php
$allowedTypes = ['image/jpeg', 'image/png', 'application/pdf']; // অনুমোদিত MIME টাইপ
$maxSize = 5 * 1024 * 1024; // 5MB
// ফাইল চেকিং
$fileType = $_FILES['fileToUpload']['type'];
$fileSize = $_FILES['fileToUpload']['size'];
if (in_array($fileType, $allowedTypes) && $fileSize <= $maxSize) {
// ফাইল আপলোড প্রক্রিয়া চালানো
// ...
} else {
echo "Invalid file type or file size exceeds the limit!";
}
?>
সারাংশ
MySQLi ব্যবহার করে ডেটাবেসে ফাইল আপলোড এবং ডাউনলোডের প্রক্রিয়া খুবই সহজ এবং নিরাপদ হতে পারে যদি সঠিকভাবে ফাইল কনটেন্ট বাইনারি ফরম্যাটে সংরক্ষণ করা হয়। file_get_contents() ব্যবহার করে ফাইল কনটেন্ট ডেটাবেসে সেভ করা যায় এবং header() ফাংশন ব্যবহার করে ফাইল ডাউনলোড করা সম্ভব। ফাইল আপলোড এবং ডাউনলোডের সময় নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ।