File Handling এবং Data Uploading গাইড ও নোট

Database Tutorials - পিএইচপি মাইএসকিউএল আই (PHP MySQL)
323

File Handling এবং Data Uploading পিএইচপি (PHP) ডেভেলপমেন্টের গুরুত্বপূর্ণ অংশ, যা ওয়েবসাইটে ফাইল আপলোড এবং ডেটাবেসে ফাইল সম্পর্কিত তথ্য সংরক্ষণ করতে ব্যবহৃত হয়। এই প্রক্রিয়া ডাইনামিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে, যেখানে ব্যবহারকারীরা তাদের ডেটা, যেমন ছবি, ডকুমেন্ট, ভিডিও ইত্যাদি আপলোড করতে পারেন।


১. File Uploading in PHP

PHP দিয়ে ফাইল আপলোড করা অনেক সহজ। সাধারণত, HTML ফর্মের মাধ্যমে ফাইলটি আপলোড করা হয় এবং পিএইচপি স্ক্রিপ্টের মাধ্যমে সেই ফাইলটি সার্ভারে আপলোড করা হয়।

উদাহরণ: সাধারণ ফাইল আপলোড

<?php
// ফাইল আপলোডের জন্য ডিরেক্টরি নির্ধারণ
$target_dir = "uploads/";  // আপলোডের ডিরেক্টরি
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// চেক করা যে ফাইলটি একটি চিত্র কিনা
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "ফাইলটি একটি ইমেজ।<br>";
        $uploadOk = 1;
    } else {
        echo "ফাইলটি একটি ইমেজ নয়।<br>";
        $uploadOk = 0;
    }
}

// চেক করা যদি ফাইলটি আগে থেকেই রয়েছে
if (file_exists($target_file)) {
    echo "দুঃখিত, ফাইলটি আগে থেকেই রয়েছে।<br>";
    $uploadOk = 0;
}

// ফাইলের সাইজ চেক করা (যেমন 500KB)
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "দুঃখিত, ফাইলটি খুব বড়।<br>";
    $uploadOk = 0;
}

// শুধুমাত্র নির্দিষ্ট ফাইল ফরম্যাট অনুমোদিত (JPEG, PNG, GIF)
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
    echo "দুঃখিত, শুধুমাত্র JPG, JPEG, PNG, GIF ফাইল অনুমোদিত।<br>";
    $uploadOk = 0;
}

// যদি সব চেক পাস হয়, ফাইলটি আপলোড করা
if ($uploadOk == 0) {
    echo "দুঃখিত, আপনার ফাইলটি আপলোড করা সম্ভব হয়নি।<br>";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "ফাইলটি ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " সফলভাবে আপলোড হয়েছে।<br>";
    } else {
        echo "দুঃখিত, ফাইলটি আপলোড করার সময় একটি ত্রুটি হয়েছে।<br>";
    }
}
?>

ব্যাখ্যা:

  • $_FILES["fileToUpload"]: এই সুপারগ্লোবাল ভেরিয়েবল ফাইল ডেটা ধারণ করে। এর মাধ্যমে ফাইলের নাম, সাইজ, টাইপ, এবং টেম্পোরারি লোকেশন পাওয়া যায়।
  • move_uploaded_file(): এই ফাংশনটি ফাইলটিকে নির্দিষ্ট ডিরেক্টরিতে আপলোড করতে ব্যবহৃত হয়।
  • ফাইল টাইপ চেক: শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন, JPG, PNG, GIF) আপলোড করতে অনুমতি দেওয়া হয়।

২. File Uploading with Database (MySQL)

ফাইলটি আপলোড করার পাশাপাশি সেই ফাইলটির তথ্য ডেটাবেসে সংরক্ষণ করা হয় (যেমন, ফাইলের নাম, পাথ ইত্যাদি)। এটি ডেটাবেসে ফাইল সম্পর্কিত মেটাডেটা সংরক্ষণের জন্য প্রয়োজনীয়।

উদাহরণ: ফাইল আপলোড এবং ডেটাবেসে তথ্য সংরক্ষণ

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// MySQL সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// ফাইল আপলোডের জন্য ডিরেক্টরি নির্ধারণ
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// চেক করা যে ফাইলটি একটি ইমেজ কিনা
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "ফাইলটি একটি ইমেজ।<br>";
        $uploadOk = 1;
    } else {
        echo "ফাইলটি একটি ইমেজ নয়।<br>";
        $uploadOk = 0;
    }
}

// চেক করা যদি ফাইলটি আগে থেকেই রয়েছে
if (file_exists($target_file)) {
    echo "দুঃখিত, ফাইলটি আগে থেকেই রয়েছে।<br>";
    $uploadOk = 0;
}

// ফাইলের সাইজ চেক করা
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "দুঃখিত, ফাইলটি খুব বড়।<br>";
    $uploadOk = 0;
}

// শুধুমাত্র নির্দিষ্ট ফাইল ফরম্যাট অনুমোদিত
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
    echo "দুঃখিত, শুধুমাত্র JPG, JPEG, PNG, GIF ফাইল অনুমোদিত।<br>";
    $uploadOk = 0;
}

// যদি সব চেক পাস হয়, ফাইলটি আপলোড করা এবং ডেটাবেসে তথ্য সংরক্ষণ
if ($uploadOk == 0) {
    echo "দুঃখিত, আপনার ফাইলটি আপলোড করা সম্ভব হয়নি।<br>";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "ফাইলটি ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " সফলভাবে আপলোড হয়েছে।<br>";
        
        // ফাইলের তথ্য ডেটাবেসে সংরক্ষণ
        $sql = "INSERT INTO files (file_name, file_path) VALUES ('".basename($_FILES["fileToUpload"]["name"])."', '$target_file')";
        
        if ($conn->query($sql) === TRUE) {
            echo "ফাইল তথ্য সফলভাবে ডেটাবেসে সংরক্ষণ হয়েছে।<br>";
        } else {
            echo "ত্রুটি: " . $sql . "<br>" . $conn->error;
        }
    } else {
        echo "দুঃখিত, ফাইলটি আপলোড করার সময় একটি ত্রুটি হয়েছে।<br>";
    }
}

$conn->close();  // সংযোগ বন্ধ করা
?>

ব্যাখ্যা:

  • INSERT INTO files (file_name, file_path): ফাইলের নাম এবং পথ ডেটাবেসের files টেবিলে সংরক্ষণ করা হচ্ছে।
  • move_uploaded_file(): ফাইলটি আপলোড করার পর ডেটাবেসে সেই ফাইলের তথ্য সংরক্ষণ করা হয়।
  • ডেটাবেসের files টেবিলে দুটি কলাম থাকতে হবে: file_name এবং file_path

৩. Multiple File Uploading in PHP

একাধিক ফাইল আপলোড করা হলে, ফাইলগুলির জন্য লুপ ব্যবহার করতে হয় যাতে সমস্ত ফাইল সার্ভারে আপলোড এবং ডেটাবেসে সংরক্ষিত হয়।

উদাহরণ: Multiple File Uploading

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "mydatabase";

// MySQL সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$target_dir = "uploads/";  // আপলোডের ডিরেক্টরি
$uploadOk = 1;

foreach ($_FILES['filesToUpload']['name'] as $key => $name) {
    $target_file = $target_dir . basename($name);
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
    
    // চেক করা ফাইলটি একটি চিত্র কিনা
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["filesToUpload"]["tmp_name"][$key]);
        if($check !== false) {
            $uploadOk = 
Content added By

PHP দিয়ে File Uploading System তৈরি করা

318

PHP দিয়ে একটি File Uploading System তৈরি করা একটি সাধারণ কিন্তু গুরুত্বপূর্ণ কাজ, যা অনেক ওয়েব অ্যাপ্লিকেশনে ব্যবহৃত হয়। এই সিস্টেমের মাধ্যমে ব্যবহারকারী ফাইল আপলোড করতে পারে এবং সেই ফাইল সঠিকভাবে সার্ভারে সংরক্ষণ করা হয়।

এই টিউটোরিয়ালে PHP এবং MySQL ব্যবহার করে একটি ফাইল আপলোড সিস্টেম তৈরি করার প্রক্রিয়া দেখানো হবে, যেখানে ব্যবহারকারী ফাইল আপলোড করবে এবং সেই ফাইলের তথ্য ডেটাবেসে সংরক্ষণ করা হবে।


1. ফাইল আপলোড সিস্টেমের উপাদান

  • HTML ফর্ম: ব্যবহারকারী ফাইল আপলোড করার জন্য একটি ফর্ম থাকবে।
  • PHP স্ক্রিপ্ট: ফাইল গ্রহণ এবং ডাটাবেসে সংরক্ষণের জন্য PHP স্ক্রিপ্ট থাকবে।
  • MySQL ডেটাবেস: আপলোড করা ফাইলের তথ্য যেমন ফাইলের নাম, ফাইলের টাইপ এবং ফাইলের সাইজ ডেটাবেসে সংরক্ষণ করা হবে।

2. ডেটাবেস টেবিল তৈরি করা

ফাইলের তথ্য সংরক্ষণের জন্য একটি টেবিল তৈরি করতে হবে। এখানে আমরা একটি uploads নামক টেবিল তৈরি করব, যেখানে ফাইলের নাম, সাইজ, এবং টাইপ সংরক্ষণ করা হবে।

2.1 SQL কোড: uploads টেবিল তৈরি করা

CREATE TABLE uploads (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    filename VARCHAR(255) NOT NULL,
    filetype VARCHAR(50) NOT NULL,
    filesize INT(11) NOT NULL,
    uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

এই টেবিলের মাধ্যমে আমরা ফাইলের নাম (filename), টাইপ (filetype), সাইজ (filesize) এবং আপলোড করার সময় (uploaded_at) সংরক্ষণ করব।


3. HTML ফর্ম তৈরি করা

HTML ফর্ম ব্যবহারকারীকে ফাইল আপলোড করার সুযোগ দেবে। এই ফর্মে একটি file input ফিল্ড থাকবে, যার মাধ্যমে ফাইল আপলোড করা যাবে।

3.1 HTML ফর্ম কোড:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
</head>
<body>
    <h2>Upload Your File</h2>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Select file:</label>
        <input type="file" name="file" id="file" required>
        <button type="submit" name="submit">Upload</button>
    </form>
</body>
</html>

এখানে enctype="multipart/form-data" ব্যবহৃত হয়েছে, যা ফাইল আপলোড করার জন্য প্রয়োজনীয়।


4. PHP স্ক্রিপ্ট লিখা

ফাইল আপলোড করার জন্য PHP স্ক্রিপ্ট ব্যবহার করা হবে। এই স্ক্রিপ্টটি ফাইলটি গ্রহণ করবে, তার সঠিকতা পরীক্ষা করবে এবং তারপর সেই ফাইলটি সার্ভারে আপলোড করবে এবং ডেটাবেসে তার তথ্য সংরক্ষণ করবে।

4.1 PHP স্ক্রিপ্ট: upload.php

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";

// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// ফাইল আপলোড হলে কোড চালানো
if (isset($_POST['submit'])) {
    // ফাইলের তথ্য প্রাপ্তি
    $file = $_FILES['file'];

    // ফাইলের নাম, সাইজ, টাইপ এবং টেম্পরারি লোকেশন
    $filename = $file['name'];
    $filetmp = $file['tmp_name'];
    $filetype = $file['type'];
    $filesize = $file['size'];

    // ফাইলের এক্সটেনশন চেক করা
    $allowed_extensions = array('jpg', 'jpeg', 'png', 'gif', 'pdf', 'docx');
    $file_ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

    if (in_array($file_ext, $allowed_extensions)) {
        // ফাইল সাইজ চেক করা (5MB এর বেশি না হয়)
        if ($filesize <= 5000000) {
            // নতুন ফাইল নাম তৈরি করা (ফাইলটি সেভ করা হবে)
            $new_filename = uniqid('', true) . "." . $file_ext;
            $destination = 'uploads/' . $new_filename;

            // ফাইল সার্ভারে আপলোড করা
            if (move_uploaded_file($filetmp, $destination)) {
                // ডেটাবেসে ফাইলের তথ্য সংরক্ষণ করা
                $sql = "INSERT INTO uploads (filename, filetype, filesize) VALUES ('$new_filename', '$filetype', '$filesize')";
                if ($conn->query($sql) === TRUE) {
                    echo "File uploaded and data saved successfully!";
                } else {
                    echo "Error: " . $sql . "<br>" . $conn->error;
                }
            } else {
                echo "Failed to upload file!";
            }
        } else {
            echo "File size is too large. Maximum allowed size is 5MB.";
        }
    } else {
        echo "Invalid file type. Allowed types are JPG, JPEG, PNG, GIF, PDF, DOCX.";
    }
}

$conn->close();
?>

এখানে যা করা হয়েছে:

  1. ফাইলের তথ্য গ্রহণ: PHP এর $_FILES সুপারগ্লোবাল ব্যবহার করে ফাইলের তথ্য যেমন নাম, টাইপ, সাইজ, এবং টেম্পরারি লোকেশন নেওয়া হয়েছে।
  2. ফাইলের এক্সটেনশন চেক: আপলোডের জন্য নির্দিষ্ট এক্সটেনশন (যেমন JPG, PNG, PDF ইত্যাদি) চেক করা হয়েছে।
  3. ফাইল সাইজ চেক: ফাইলের সাইজ 5MB এর বেশি না হয় তা নিশ্চিত করা হয়েছে।
  4. ফাইল আপলোড: ফাইলটি সার্ভারে আপলোড করার জন্য move_uploaded_file() ফাংশন ব্যবহার করা হয়েছে।
  5. ডেটাবেসে তথ্য সংরক্ষণ: ফাইলের নাম, টাইপ এবং সাইজ ডেটাবেসের uploads টেবিলে সংরক্ষণ করা হয়েছে।

5. ফাইল আপলোড ডিরেক্টরি তৈরি করা

ফাইলগুলি সার্ভারে সঠিকভাবে আপলোড করার জন্য একটি uploads/ ডিরেক্টরি তৈরি করতে হবে।

5.1 uploads ডিরেক্টরি তৈরি করুন:

mkdir uploads

এই ডিরেক্টরিটি ফাইল আপলোড করার জন্য ব্যবহৃত হবে। নিশ্চিত করুন যে সার্ভারে এই ডিরেক্টরির লেখার অনুমতি আছে।


6. ফাইল আপলোড এবং ডেটাবেসে তথ্য সংরক্ষণ

এখন, যখন আপনি HTML ফর্মটি পূর্ণ করবেন এবং Upload বাটনে ক্লিক করবেন, ফাইলটি সার্ভারে আপলোড হবে এবং তার তথ্য ডেটাবেসে সংরক্ষিত হবে। সফলভাবে আপলোড হলে, একটি মেসেজ দেখানো হবে।


উপসংহার

PHP দিয়ে ফাইল আপলোড সিস্টেম তৈরি করা সহজ এবং কার্যকরী। $_FILES সুপারগ্লোবাল ব্যবহার করে ফাইলের তথ্য গ্রহণ করা যায়, এবং move_uploaded_file() ফাংশন দিয়ে ফাইলটি সার্ভারে আপলোড করা হয়। সঠিক ফাইল সাইজ, এক্সটেনশন চেকিং, এবং ডেটাবেসে তথ্য সংরক্ষণ সহ, এই সিস্টেমটি সহজে তৈরি করা যায় এবং বিভিন্ন ওয়েব অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে।

Content added By

MySQL এ ফাইলের পাথ সংরক্ষণ

293

যখন আপনি একটি ফাইল আপলোড করেন এবং সেই ফাইলের পাথ (path) বা অবস্থান (location) MySQL ডাটাবেসে সংরক্ষণ করতে চান, তখন ফাইলের পাথ সংরক্ষণ করা একটি সাধারণ কাজ। এটি সাধারণত ফাইল আপলোড সিস্টেমের ক্ষেত্রে ব্যবহৃত হয়, যেখানে ফাইল সিস্টেমে ফাইলটি সংরক্ষণ করা হয় এবং ডাটাবেসে সেই ফাইলের পাথ সংরক্ষণ করা হয়।

এখানে আমরা দেখব কিভাবে ফাইল আপলোড করে তার পাথ MySQL ডাটাবেসে সংরক্ষণ করা যায়।


1. ফাইল আপলোড করার জন্য HTML ফর্ম তৈরি করা

প্রথমে, ফাইল আপলোড করার জন্য একটি HTML ফর্ম তৈরি করতে হবে। এটি ব্যবহারকারীদের একটি ফাইল সিলেক্ট করার সুযোগ দেয় এবং সেই ফাইলটি সার্ভারে আপলোড করা হয়।

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <label for="file">Choose a file:</label>
    <input type="file" name="file" id="file" required>
    <button type="submit" name="submit">Upload</button>
</form>

এখানে, enctype="multipart/form-data" ব্যবহার করা হয়েছে যাতে ফাইল সঠিকভাবে সার্ভারে পাঠানো যায়।


2. ফাইল আপলোড এবং পাথ MySQL ডাটাবেসে সংরক্ষণ

এখন, ফাইলটি সার্ভারে আপলোড করার পর, সেই ফাইলের পাথ MySQL ডাটাবেসে সংরক্ষণ করার জন্য একটি PHP স্ক্রিপ্ট তৈরি করব।

2.1 PHP স্ক্রিপ্ট তৈরি করা

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// ডাটাবেস সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// ফাইল আপলোড চেক করা
if (isset($_POST['submit'])) {
    $file = $_FILES['file'];
    
    // ফাইলের নাম, টেম্পোরারি পাথ এবং এক্সটেনশন বের করা
    $fileName = $_FILES['file']['name'];
    $fileTmpName = $_FILES['file']['tmp_name'];
    $fileError = $_FILES['file']['error'];
    $fileSize = $_FILES['file']['size'];
    
    // ফাইল এক্সটেনশন চেক করা
    $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
    $allowed = array('jpg', 'jpeg', 'png', 'pdf'); // অনুমোদিত এক্সটেনশন

    // যদি ফাইল এক্সটেনশন বৈধ হয়
    if (in_array($fileExt, $allowed)) {
        // যদি কোনো ত্রুটি না থাকে
        if ($fileError === 0) {
            // ফাইল সাইজ চেক করা (৫MB এর কম)
            if ($fileSize < 5000000) {
                // নতুন ফাইল নাম তৈরি করা (ইউনিকে ফাইল নাম দেওয়া)
                $fileNewName = uniqid('', true) . "." . $fileExt;
                $fileDestination = 'uploads/' . $fileNewName;
                
                // ফাইলটি নির্দিষ্ট ডিরেক্টরিতে আপলোড করা
                if (move_uploaded_file($fileTmpName, $fileDestination)) {
                    // ফাইলের পাথ ডাটাবেসে সংরক্ষণ
                    $sql = "INSERT INTO files (file_name, file_path) VALUES ('$fileName', '$fileDestination')";
                    if ($conn->query($sql) === TRUE) {
                        echo "File uploaded successfully. Path saved in database.";
                    } else {
                        echo "Error: " . $sql . "<br>" . $conn->error;
                    }
                } else {
                    echo "There was an error uploading your file.";
                }
            } else {
                echo "Your file is too large.";
            }
        } else {
            echo "There was an error uploading your file.";
        }
    } else {
        echo "You cannot upload files of this type.";
    }
}

$conn->close();
?>

2.2 কোডের ব্যাখ্যা:

  • ফাইল আপলোড চেক: প্রথমে, ফাইলটি আপলোড হয়েছে কি না তা চেক করা হয় isset($_POST['submit']) দিয়ে।
  • ফাইলের তথ্য নেওয়া: $_FILES এর মাধ্যমে ফাইলের নাম, টাইপ, টেম্পোরারি পাথ, সাইজ ইত্যাদি নেওয়া হয়।
  • ফাইল এক্সটেনশন চেক: আমরা শুধুমাত্র নির্দিষ্ট এক্সটেনশন (যেমন: .jpg, .jpeg, .png, .pdf) অনুমোদন করি।
  • ফাইল সাইজ চেক: ফাইলের সাইজ ৫MB এর নিচে হতে হবে।
  • ফাইল রিনেমিং: ফাইলের নামকে ইউনিক বানাতে uniqid() ফাংশন ব্যবহার করা হয়, যাতে একে অপরের সাথে ফাইলের নাম কনফ্লিক্ট না হয়।
  • ফাইল আপলোড: move_uploaded_file() ফাংশনের মাধ্যমে ফাইলটিকে ডিরেক্টরিতে স্থানান্তরিত করা হয়।
  • ডাটাবেসে পাথ সংরক্ষণ: ফাইলটি সফলভাবে আপলোড হলে, তার পাথ (ফাইলের নতুন অবস্থান) uploads/ ডিরেক্টরিতে সংরক্ষণ করা হয় এবং সেই পাথ ডাটাবেসের file_path কলামে স্টোর করা হয়।

3. MySQL টেবিল তৈরি করা

ডাটাবেসে ফাইলের পাথ সংরক্ষণ করার জন্য একটি টেবিল তৈরি করতে হবে। নিচে একটি উদাহরণ দেয়া হলো:

CREATE TABLE files (
    id INT AUTO_INCREMENT PRIMARY KEY,
    file_name VARCHAR(255) NOT NULL,
    file_path VARCHAR(255) NOT NULL
);

এই টেবিলের মাধ্যমে আপনি ফাইলের নাম (file_name) এবং পাথ (file_path) সংরক্ষণ করতে পারবেন।


4. ফাইলের পাথ রিটার্ন করা

ফাইলটি আপলোড হওয়ার পর, ডাটাবেস থেকে ফাইলের পাথ রিট্রিভ করতে চাইলে নিম্নলিখিত কোড ব্যবহার করতে পারেন:

<?php
$sql = "SELECT * FROM files";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "File Name: " . $row["file_name"] . " - File Path: " . $row["file_path"] . "<br>";
    }
} else {
    echo "No files found.";
}
?>

এই কোডটি ডাটাবেস থেকে সমস্ত ফাইলের পাথ এবং নাম রিটার্ন করবে।


সারাংশ

ফাইল আপলোড করার পর, ফাইলের পাথ MySQL ডাটাবেসে সংরক্ষণ করা একটি সাধারণ প্রক্রিয়া। LIMIT, OFFSET এবং ফাইল আপলোডের মতো অন্যান্য অপারেশনসহ, ডাটাবেসে সঠিক তথ্য স্টোর করা অত্যন্ত গুরুত্বপূর্ণ। PHP স্ক্রিপ্টের মাধ্যমে ফাইল আপলোড এবং পাথ সংরক্ষণ করার এই প্রক্রিয়া কার্যকরী এবং সহজে ডাটাবেস ব্যবস্থাপনায় সাহায্য করে।

Content added By

File Validation এবং Security Measures

264

ফাইল আপলোড একটি সাধারণ ফিচার ওয়েব অ্যাপ্লিকেশনে, তবে এটি সঠিকভাবে পরিচালনা না করলে সুরক্ষা ঝুঁকি তৈরি করতে পারে। যেমন, ম্যালওয়্যার বা অবাঞ্ছিত ফাইল সার্ভারে আপলোড করা হতে পারে। তাই, ফাইল আপলোডের সময় সঠিক ফাইল ভ্যালিডেশন এবং সিকিউরিটি মেজার নেওয়া অত্যন্ত গুরুত্বপূর্ণ।


1. ফাইল আপলোডের সময় সিকিউরিটি রিস্ক

ফাইল আপলোডের সময় কিছু সিকিউরিটি ঝুঁকি সৃষ্টি হতে পারে:

  • Malware: হ্যাকাররা ম্যালওয়্যার বা ভাইরাস সংক্রমিত ফাইল আপলোড করতে পারে।
  • File Type Spoofing: ব্যবহারকারী পিএইচপি স্ক্রিপ্ট বা অন্যান্য খারাপ ফাইল টাইপ আপলোড করার চেষ্টা করতে পারে।
  • Large File Uploads: বড় ফাইল আপলোডের কারণে সার্ভারের মেমরি বা ব্যান্ডউইথ সমস্যা হতে পারে।
  • Overwriting: পূর্ববর্তী ফাইলের উপর নতুন ফাইল লেখা যেতে পারে।

এই ঝুঁকিগুলি কমানোর জন্য আমাদের যথাযথ ভ্যালিডেশন এবং সিকিউরিটি মেজার ব্যবহার করা উচিত।


2. ফাইল আপলোড ভ্যালিডেশন স্টেপস

2.1 ফাইল টাইপ ভ্যালিডেশন

প্রথমত, ফাইলের টাইপ চেক করা উচিত, যাতে অজানা বা বিপজ্জনক ফাইল আপলোড না হয়। আপনি শুধুমাত্র নির্দিষ্ট ফাইল এক্সটেনশন (যেমন: .jpg, .png, .pdf) অনুমোদন করতে পারেন।

<?php
// অনুমোদিত ফাইল এক্সটেনশন
$allowed_types = ['jpg', 'jpeg', 'png', 'gif', 'pdf'];

// ফাইলের এক্সটেনশন বের করা
$file_extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);

// এক্সটেনশন চেক করা
if (!in_array(strtolower($file_extension), $allowed_types)) {
    echo "Invalid file type.";
    exit;
}
?>

2.2 ফাইল সাইজ চেক করা

ফাইলের সাইজও ভ্যালিডেট করা গুরুত্বপূর্ণ। এটি সুরক্ষার পাশাপাশি সার্ভার রিসোর্স সুরক্ষিত রাখতেও সাহায্য করে। সাধারণত ১০ মেগাবাইটের বেশি ফাইল আপলোড করা থেকে বিরত রাখা উচিত।

<?php
// সর্বাধিক অনুমোদিত ফাইল সাইজ (10MB)
$max_file_size = 10 * 1024 * 1024;  // 10MB

// ফাইল সাইজ চেক করা
if ($_FILES['file']['size'] > $max_file_size) {
    echo "File is too large. Maximum allowed size is 10MB.";
    exit;
}
?>

2.3 ফাইল নাম ভ্যালিডেশন

ফাইলের নাম যাচাই করা উচিত যাতে সেখানে বিশেষ ক্যারেক্টার বা স্ক্রিপ্ট ইনজেকশন না থাকে। একটি ভালো পদ্ধতি হল ফাইলের নাম পরিবর্তন করা অথবা একে নিরাপদভাবে হ্যান্ডেল করা।

<?php
// ফাইলের নাম স্যানিটাইজ করা
$clean_file_name = preg_replace("/[^a-zA-Z0-9\-_\.]/", "", $_FILES['file']['name']);

// ফাইলের নতুন নাম তৈরি করা
$new_file_name = uniqid() . "-" . $clean_file_name;

$upload_directory = "uploads/";

// ফাইল আপলোড করা
if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_directory . $new_file_name)) {
    echo "File uploaded successfully.";
} else {
    echo "File upload failed.";
}
?>

2.4 মাইম টাইপ ভ্যালিডেশন

ফাইলের প্রকৃত প্রকার চেক করার জন্য mime_type যাচাই করা খুবই গুরুত্বপূর্ণ। এটি ফাইল এক্সটেনশন স্পুফিং প্রতিরোধে সাহায্য করবে।

<?php
// ফাইলের মাইম টাইপ চেক করা
$file_mime_type = mime_content_type($_FILES['file']['tmp_name']);

$allowed_mimes = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];

if (!in_array($file_mime_type, $allowed_mimes)) {
    echo "Invalid file MIME type.";
    exit;
}
?>

3. ফাইল স্টোরেজ সিকিউরিটি মেজার

3.1 ফাইল আপলোড ডিরেক্টরি সিকিউর করা

আপলোড করা ফাইলগুলো সুরক্ষিত অবস্থায় রাখতে হবে, তাই অবশ্যই নিরাপদ ডিরেক্টরিতে ফাইল সঞ্চয় করা উচিত এবং ফাইল এক্সটেনশন মঞ্জুর করা উচিত না যাতে সরাসরি এক্সিকিউট করা না যায়। এই জন্য .htaccess ফাইল ব্যবহার করা যেতে পারে।

# .htaccess ফাইলের মধ্যে
php_flag engine off

এই কোডটি ফাইলগুলিকে এক্সিকিউট করা থেকে রক্ষা করবে। শুধু স্ট্যাটিক ফাইল হিসেবে চলতে দেবে।

3.2 ফাইলের অ্যাক্সেস কন্ট্রোল

ফাইলগুলোর উপর অ্যাক্সেস কন্ট্রোল প্রয়োগ করা উচিত যাতে বাইরের ব্যবহারকারী সহজে ফাইলগুলো অ্যাক্সেস করতে না পারে। ফাইলগুলোর পঠিত এবং লিখিত অনুমতি সঠিকভাবে নির্ধারণ করা দরকার।

<?php
// ফাইলের প্রপার পারমিশন সেট করা
chmod($upload_directory . $new_file_name, 0644);
?>

3.3 একই নামের ফাইল আপলোড রোধ করা

একই নামের ফাইল সার্ভারে পুনরায় আপলোড হতে পারে। এজন্য প্রতিটি ফাইলের জন্য একটি ইউনিক নাম তৈরি করতে হবে।

<?php
// ফাইলের ইউনিক নাম তৈরি করা
$new_file_name = uniqid() . "-" . $_FILES['file']['name'];
?>

4. অতিরিক্ত সিকিউরিটি মেজার

4.1 ফাইলের আউটপুট প্রক্রিয়া নিরাপদ করা

ফাইল ডাউনলোড করার সময়, তার আউটপুট প্রক্রিয়ায় সুরক্ষা নিশ্চিত করা উচিত। ফাইলের প্রকৃত প্রকার চেক করা উচিত যাতে ব্যবহারকারীরা কোন ক্ষতিকারক স্ক্রিপ্ট ডাউনলোড না করে।

<?php
// ফাইল ডাউনলোড প্রক্রিয়ায় মাইম টাইপ চেক করা
$allowed_mimes = ['image/jpeg', 'image/png', 'image/gif', 'application/pdf'];

if (in_array($file_mime_type, $allowed_mimes)) {
    // ফাইল ডাউনলোড করা
    header('Content-Type: ' . $file_mime_type);
    header('Content-Disposition: attachment; filename="' . $new_file_name . '"');
    readfile($upload_directory . $new_file_name);
} else {
    echo "Invalid file type for download.";
}
?>

4.2 CSRF (Cross-Site Request Forgery) প্রতিরোধ

ফাইল আপলোডের সময় CSRF আক্রমণ থেকে রক্ষা পেতে, ফর্মে CSRF টোকেন ব্যবহার করতে পারেন।

<?php
// CSRF টোকেন জেনারেট করা
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        // ফাইল আপলোড প্রসেসিং
    } else {
        echo "Invalid CSRF token.";
    }
}
?>

সারাংশ

ফাইল আপলোডের সময় সুরক্ষা একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়। ফাইল টাইপ ভ্যালিডেশন, ফাইল সাইজ চেক, মাইম টাইপ যাচাই এবং নিরাপদ ফাইল স্টোরেজ নিশ্চিত করে যে, আপনার ওয়েব অ্যাপ্লিকেশন সুরক্ষিত থাকবে। এছাড়া, CSRF, XSS, এবং ম্যালওয়্যার থেকে রক্ষা পেতে সঠিক সিকিউরিটি মেজার গ্রহণ করা উচিত।


Content added By

Uploaded Files এর Management এবং Deletion

307

যখন ব্যবহারকারীরা একটি ওয়েব অ্যাপ্লিকেশনে ফাইল আপলোড করেন, তখন সেই ফাইলগুলি সঠিকভাবে ম্যানেজ (প্রশাসন) এবং ডিলিট (মুছে ফেলা) করা গুরুত্বপূর্ণ। PHP এবং MySQL ব্যবহার করে, আপনি সহজেই আপলোড করা ফাইলগুলির ট্র্যাক রাখতে পারেন এবং প্রয়োজনের সময় সেগুলি মুছে ফেলতে পারেন।


১. File Upload Management

ফাইল আপলোডের প্রক্রিয়া অনেক গুরুত্বপূর্ণ, বিশেষ করে বড় সাইজের ফাইল এবং বিভিন্ন ফাইল ফরম্যাটের ক্ষেত্রে। PHP এর সাহায্যে, আপনি ফাইল আপলোড প্রক্রিয়াটি সহজে নিয়ন্ত্রণ করতে পারেন।

১.১ File Upload Form তৈরি করা

প্রথমে, HTML ফর্ম তৈরি করা দরকার যেখানে ব্যবহারকারী ফাইল আপলোড করতে পারবেন।

<!DOCTYPE html>
<html>
<head>
    <title>File Upload</title>
</head>
<body>
    <form action="upload.php" 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>
</body>
</html>

এই ফর্মটি ব্যবহারকারীকে একটি ফাইল নির্বাচন করার জন্য প্রম্পট করবে এবং তারপর upload.php ফাইলটি ব্যবহৃত হবে ফাইলটি আপলোড করার জন্য।

১.২ PHP স্ক্রিপ্ট দিয়ে ফাইল আপলোড করা

এখন, PHP স্ক্রিপ্ট তৈরি করে ফাইলটি আপলোড করা হবে:

<?php
$target_dir = "uploads/"; // ফাইল আপলোডের জন্য ডিরেক্টরি
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

// চেক করা হচ্ছে, ফাইলটি একটি ইমেজ কি না
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}

// যদি ফাইলটি ইতিমধ্যে এক্সিস্ট করে তবে তা চেক করা হচ্ছে
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

// ফাইল সাইজ চেক করা
if ($_FILES["fileToUpload"]["size"] > 500000) { // 500KB এর বেশি ফাইল সাইজ অনুমোদিত নয়
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// শুধুমাত্র নির্দিষ্ট ফাইল ফরম্যাট অনুমোদন করা হচ্ছে
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// যদি সবকিছু ঠিক থাকে, তবে ফাইলটি আপলোড করা হবে
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

এখানে:

  • $_FILES["fileToUpload"]: এই সুপারগ্লোবাল ভেরিয়েবলটি ব্যবহার করে ফাইলের তথ্য অ্যাক্সেস করা হয়।
  • move_uploaded_file(): এই ফাংশনটি ব্যবহার করে আপলোড হওয়া ফাইলটি নির্দিষ্ট ডিরেক্টরিতে সরানো হয়।
  • File validation: ফাইলের টাইপ, সাইজ এবং এক্সিস্টিং ফাইল চেক করা হয়েছে।

২. Uploaded Files রেকর্ড MySQL ডেটাবেসে সংরক্ষণ করা

আপনি চাইলে আপলোড হওয়া ফাইলের তথ্য (যেমন ফাইলের নাম, টাইপ, সাইজ) ডেটাবেসে সংরক্ষণ করতে পারেন। এটি ভবিষ্যতে ফাইল ব্যবস্থাপনা এবং মুছে ফেলা সহজ করবে।

২.১ Database Table Structure

আপলোড হওয়া ফাইলের তথ্য সংরক্ষণ করার জন্য একটি টেবিল তৈরি করুন:

CREATE TABLE uploaded_files (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    file_name VARCHAR(255) NOT NULL,
    file_type VARCHAR(50) NOT NULL,
    file_size INT(11) NOT NULL,
    upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

২.২ PHP স্ক্রিপ্ট দিয়ে ফাইলের তথ্য ডেটাবেসে সংরক্ষণ করা

<?php
// ডেটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "my_database");

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    // ফাইলের তথ্য ডেটাবেসে সংরক্ষণ করা
    $sql = "INSERT INTO uploaded_files (file_name, file_type, file_size) 
            VALUES ('" . basename($_FILES["fileToUpload"]["name"]) . "', '" . $imageFileType . "', '" . $_FILES["fileToUpload"]["size"] . "')";
    
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}

// ডেটাবেস সংযোগ বন্ধ করা
$conn->close();
?>

এখানে:

  • ফাইল আপলোড হওয়ার পর, সেই ফাইলের নাম, টাইপ এবং সাইজ ডেটাবেসে সংরক্ষণ করা হচ্ছে।
  • INSERT INTO uploaded_files কুয়েরি ব্যবহার করে তথ্য সংরক্ষণ করা হচ্ছে।

৩. File Deletion (ফাইল মুছে ফেলা)

ফাইল মুছে ফেলার জন্য, আপনাকে ডেটাবেস থেকে ফাইলের রেকর্ড মুছে ফেলতে হবে এবং তারপর সেই ফাইলটি ফিজিক্যালি সার্ভার থেকে মুছে ফেলতে হবে।

৩.১ File Deletion from Database

ডেটাবেস থেকে ফাইলের তথ্য মুছে ফেলার জন্য, আপনাকে ফাইলের ID বা file_name ব্যবহার করে ডিলিট কুয়েরি লিখতে হবে।

<?php
// ডেটাবেস সংযোগ
$conn = new mysqli("localhost", "root", "", "my_database");

// সংযোগ চেক করা
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// ফাইল ID নিয়ে ডিলিট কুয়েরি
$file_id = $_GET['id']; // ডিলিট করতে হবে এমন ফাইলের ID
$sql = "SELECT file_name FROM uploaded_files WHERE id = $file_id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $file_name = $row["file_name"];

    // ডেটাবেস থেকে রেকর্ড মুছে ফেলা
    $sql = "DELETE FROM uploaded_files WHERE id = $file_id";
    if ($conn->query($sql) === TRUE) {
        echo "Record deleted successfully";

        // ফাইল সিস্টেম থেকে ফাইল মুছে ফেলা
        $file_path = "uploads/" . $file_name;
        if (file_exists($file_path)) {
            unlink($file_path);
            echo " File deleted from server.";
        } else {
            echo " File does not exist on the server.";
        }
    } else {
        echo "Error: " . $conn->error;
    }
}

$conn->close();
?>

এখানে:

  • প্রথমে ডেটাবেস থেকে ফাইলের নাম নিয়ে আসা হচ্ছে।
  • তারপর unlink() ফাংশন ব্যবহার করে ফাইলটি সিস্টেম থেকে মুছে ফেলা হচ্ছে।
  • অবশেষে, ডেটাবেস থেকে সংশ্লিষ্ট রেকর্ড মুছে ফেলা হচ্ছে।

৪. Best Practices for File Management

  1. File Validation: ফাইল আপলোড করার আগে তার টাইপ, সাইজ এবং এক্সটেনশন যাচাই করুন, যেন ক্ষতিকর ফাইল আপলোড না হয়।
  2. Unique File Names: ফাইলের নামের মধ্যে ইউনিক আইডেন্টিফায়ার (যেমন, টাইমস্ট্যাম্প বা র্যান্ডম নাম) যোগ করুন, যেন একই নামের ফাইল আপলোডের সমস্যা না হয়।
  3. Security: ফাইল আপলোডের সময়, ব্যবহারকারীদের আপলোড করার জন্য অনুমোদিত ফাইল টাইপের সীমাবদ্ধতা দিন।
  4. Storage Optimization: বড় ফাইলগুলোর জন্য
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...