Comment

PHP প্রসেসিং ফর্ম (Processing Forms)

PHP ফাইল আপলোড (File Upload)

Estimated reading: 8 minutes 13 views Contributors

সারাংশ: এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে একটি ফাইল আপলোড ফর্ম তৈরি করতে হয় এবং আপলোড করা ফাইলগুলিকে নিরাপদে পিএইচপিতে প্রক্রিয়া করতে হয়।

ফাইল ইনপুট উপাদান পরিচিতি

type=”file” সহ <input> উপাদানটি আপনাকে তাদের স্টোরেজ থেকে এক বা একাধিক ফাইল নির্বাচন করতে এবং ফর্ম জমা দেওয়ার মাধ্যমে সার্ভারে আপলোড করতে দেয়।

নিম্নলিখিত ফাইল ইনপুট উপাদান দেখায়:

<input type="file" id="file" name="file">

<input> উপাদানের মান নির্বাচিত ফাইলের পথ ধরে রাখবে। একাধিক ফাইল আপলোড করতে, আপনি <input> এলিমেন্টে একাধিক অ্যাট্রিবিউট যোগ করুন এভাবে:

<input type="file" id="file" name="file" multiple>

এই ক্ষেত্রে, মান বৈশিষ্ট্যটি নির্বাচিত ফাইল তালিকার প্রথম ফাইলের পথ ধরে রাখবে। নোট করুন যে আপনি পরবর্তী টিউটোরিয়ালে একাধিক ফাইল আপলোড করতে শিখবেন।

নির্দিষ্ট ফাইল প্রকার আপলোড করার অনুমতি দিতে, আপনি স্বীকার বৈশিষ্ট্য ব্যবহার করুন। স্বীকার বৈশিষ্ট্যের মান হল একটি অনন্য ফাইল টাইপ স্পেসিফায়ার, যা হতে পারে:

একটি বৈধ কেস-সংবেদনশীল ফাইল নামের এক্সটেনশন যেমন, .jpg, .pdf, .txt

একটি বৈধ MIME প্রকারের স্ট্রিং৷

অথবা একটি স্ট্রিং যেমন image/* (যেকোন ইমেজ ফাইল), ভিডিও/* (যেকোন ভিডিও ফাইল), অডিও/* (যেকোন অডিও ফাইল)।

আপনি যদি একাধিক ফাইল টাইপ স্পেসিফায়ার ব্যবহার করেন, তাহলে আপনাকে কমা (,) ব্যবহার করে আলাদা করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিত সেটিং আপনাকে শুধুমাত্র .png এবং .jpeg ছবি আপলোড করতে দেয়:

<input type="file" accept="image/png, image/jpeg" name="file">

যে <form> উপাদানটিতে ফাইল ইনপুট উপাদান রয়েছে তার মান মাল্টিপার্ট/ফর্ম-ডেটা সহ এনটাইপ বৈশিষ্ট্য থাকতে হবে:

<form enctype="multipart/form-data" action="index.php" method="post">
</form>

যদি তা না হয়, ব্রাউজার ফাইল আপলোড করতে সক্ষম হবে না। নিম্নলিখিত একটি সময়ে একটি একক ফাইল আপলোড করার জন্য একটি সহজ ফর্ম চিত্রিত করে:

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

PHP ফাইল আপলোড কনফিগারেশন

পিএইচপি-তে কিছু গুরুত্বপূর্ণ বিকল্প রয়েছে যা ফাইল আপলোড নিয়ন্ত্রণ করে। এই অপশনগুলো php.ini ফাইলে আছে। আপনি যদি আপনার php.ini ফাইলটি কোথায় পাবেন তা না জানেন, আপনি php_ini_loaded_file() ফাংশনটি নিম্নরূপ ব্যবহার করতে পারেন:

<?php


echo php_ini_loaded_file();

আপনি যদি উইন্ডোজে XAMPP ব্যবহার করেন তবে এটি নিম্নলিখিত ফাইলের পথটি ফিরিয়ে দেবে:

C:\xampp\php\php.ini

এখানে php.ini ফাইলে ফাইল আপলোডের জন্য গুরুত্বপূর্ণ সেটিংস রয়েছে:

; Whether to allow HTTP file uploads.
file_uploads=On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir="C:\xampp\tmp"

; Maximum allowed size for uploaded files.
upload_max_filesize=2M

; Maximum number of files that can be uploaded via a single request
max_file_uploads=20

ফাইল_আপলোড

ফাইল আপলোড করার জন্য ফাইল_আপলোড নির্দেশিকা চালু হওয়া উচিত। এটা ডিফল্ট অন.

আপলোড_max_filesize

upload_max_filesize আপলোড করা ফাইলের সর্বোচ্চ আকার নির্দিষ্ট করে। ডিফল্টরূপে, এটি 2M (MB)। যদি আপনি একটি ত্রুটি পান যে ফাইলটি upload_max_filesize ছাড়িয়ে গেছে, আপনাকে এই মান বাড়াতে হবে।

আপলোড_tmp_dir

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

post_max_size

post_max_size POST ডেটার সর্বোচ্চ আকার নির্দিষ্ট করে। যেহেতু আপনি POST অনুরোধের সাথে ফাইল আপলোড করবেন, তাই আপনাকে নিশ্চিত করতে হবে যে post_max_size আপলোড_max_size থেকে বড়।

সর্বোচ্চ_ফাইল_আপলোড

max_file_uploads নির্দেশিকা আপনি একবারে আপলোড করতে পারেন এমন ফাইলের সংখ্যা সীমিত করে।

PHP তে ফাইল আপলোড পরিচালনা করা

একটি আপলোড করা ফাইলের তথ্য অ্যাক্সেস করতে, আপনি $_FILES অ্যারে ব্যবহার করুন। উদাহরণস্বরূপ, যদি ফাইল ইনপুট উপাদানটির নাম ফাইল হয়, আপনি $_FILES[‘file’] এর মাধ্যমে আপলোড করা ফাইলটি অ্যাক্সেস করতে পারেন।

$_FILE[‘file’] হল একটি সহযোগী অ্যারে যা নিম্নলিখিত কীগুলি নিয়ে গঠিত:

  • নাম: আপলোড করা ফাইলের নাম।
  • প্রকার: আপলোড ফাইলের MIME প্রকার যেমন, JPEG ছবির জন্য image/jpeg অথবা PDF ফাইলের জন্য অ্যাপ্লিকেশন/pdf।
  • আকার: বাইটে আপলোড করা ফাইলের আকার।
  • tmp_name: সার্ভারে অস্থায়ী ফাইল যা আপলোড করা ফাইলের নাম সংরক্ষণ করে। আপলোড করা ফাইলটি খুব বড় হলে, tmp_name “কোনটিই নয়”।
  • ত্রুটি: একটি ত্রুটি কোড যা আপলোড স্থিতি বর্ণনা করে যেমন, UPLOAD_ERR_OK মানে ফাইলটি সফলভাবে আপলোড হয়েছে৷ এখানে আরো ত্রুটি বার্তা.

নিম্নলিখিত বার্তা ধ্রুবক সংজ্ঞায়িত করে যা সংশ্লিষ্ট বার্তার সাথে ত্রুটি কোড ম্যাপ করে:

const MESSAGES = [
    UPLOAD_ERR_OK => 'File uploaded successfully',
    UPLOAD_ERR_INI_SIZE => 'File is too big to upload',
    UPLOAD_ERR_FORM_SIZE => 'File is too big to upload',
    UPLOAD_ERR_PARTIAL => 'File was only partially uploaded',
    UPLOAD_ERR_NO_FILE => 'No file was uploaded',
    UPLOAD_ERR_NO_TMP_DIR => 'Missing a temporary folder on the server',
    UPLOAD_ERR_CANT_WRITE => 'File is failed to save to disk.',
    UPLOAD_ERR_EXTENSION => 'File is not allowed to upload to this server',
];

আপনি যদি একটি ত্রুটি কোডের উপর ভিত্তি করে একটি বার্তা পেতে চান, তাহলে আপনি এটিকে এইভাবে MESSAGES অ্যারেতে দেখতে পারেন:

$message = MESSAGES[$_FILES['file']['error']];

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

move_uploaded_file() ফাংশন দুটি আর্গুমেন্ট গ্রহণ করে:

  • ফাইলের নাম: আপলোড করা ফাইলের ফাইলের নাম যা $_FILES[‘file’][‘tmp_name’]।
  • গন্তব্য: সরানো ফাইলের গন্তব্য।

move_uploaded_file() ফাংশনটি সত্য রিটার্ন করে যদি এটি ফাইলটি সফলভাবে স্থানান্তর করে; অন্যথায়, এটি মিথ্যা ফেরত দেয়।

নিরাপত্তা ব্যবস্থা

$_FILES ভেরিয়েবলের সমস্ত তথ্য tmp_name ছাড়া বিশ্বাস করা যায় না। হ্যাকাররা $_FILES ম্যানিপুলেট করতে পারে এবং সার্ভারে ক্ষতিকারক স্ক্রিপ্ট আপলোড করতে পারে।

এটি প্রতিরোধ করতে, আপনাকে $_FILES-এ তথ্য যাচাই করতে হবে। প্রথমে, isset() ব্যবহার করে ফাইল ইনপুট নামটি $_FILES ভেরিয়েবলে আছে কিনা তা পরীক্ষা করুন:

if(! isset($_FILES['file']) ) {
   // error
}

এই উদাহরণে, ‘ফাইল’ হল ফাইল ইনপুট উপাদানের নাম।

দ্বিতীয়ত, filesize() ফাংশন কল করে ফাইলের প্রকৃত আকার পরীক্ষা করুন এবং সর্বোচ্চ অনুমোদিত ফাইলের আকারের সাথে এর ফলাফল তুলনা করুন। এটি $_FILES দ্বারা প্রদত্ত আকারকে বিশ্বাস করা উচিত নয়৷ উদাহরণ স্বরূপ:

const MAX_SIZE  = 5 * 1024 * 1024; //  5MB

if (filesize($_FILES['file']['tmp_name']) > MAX_SIZE) {
   // error
}

মনে রাখবেন যে MAX_SIZE অবশ্যই php.ini-এ উল্লেখিত upload_max_filesize এর চেয়ে বেশি হবে না।

একটি ফাইলের আকার বাইটে, যা মানুষের পাঠযোগ্য নয়। এটিকে আরও পঠনযোগ্য করার জন্য, আমরা এমন একটি ফাংশন সংজ্ঞায়িত করতে পারি যা বাইটগুলিকে একটি মানব-পঠনযোগ্য বিন্যাসে রূপান্তর করে যেমন, 1.20M, 2.51G:

function format_filesize(int $bytes, int $decimals = 2): string
{
    $units = 'BKMGTP';
    $factor = floor((strlen($bytes) - 1) / 3);

    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $units[(int)$factor];
}

তৃতীয়, অনুমোদিত ফাইল প্রকারের বিপরীতে ফাইলের MIME প্রকার যাচাই করুন। এটি করার জন্য, আপনাকে অনুমোদিত ফাইলগুলির একটি তালিকা নির্ধারণ করতে হবে:

const ALLOWED_FILES = [
   'image/png' => 'png',
   'image/jpeg' => 'jpg'
];

একটি ফাইলের আসল মাইম টাইপ পেতে, আপনি তিনটি ফাংশন ব্যবহার করেন: finfo_open(), finfo_file(), এবং finfo_close()।

  • finfo_open() একটি নতুন ফাইল ইনফো রিসোর্স প্রদান করে।
  • finfo_file() ফাইল সম্পর্কে তথ্য প্রদান করে।
  • finfo_close() ফাইলইনফো রিসোর্স বন্ধ করে দেয়।

এটিকে সহজ এবং পুনঃব্যবহারযোগ্য করার জন্য, আপনি একটি ফাংশন get_mime_type() এভাবে সংজ্ঞায়িত করতে পারেন:

function get_mime_type(string $filename)
{
    $info = finfo_open(FILEINFO_MIME_TYPE);
    if (!$info) {
        return false;
    }

    $mime_type = finfo_file($info, $filename);
    finfo_close($info);

    return $mime_type;
}

get_mime_type() ফাংশন একটি ফাইলের নাম গ্রহণ করে এবং ফাইলের MIME প্রকার প্রদান করে। একটি ত্রুটি ঘটলে এটি মিথ্যা ফিরে আসবে।

নোট করুন যে ইন্টারনেট অ্যাসাইনড নম্বর অথরিটি (IANA) সমস্ত অফিসিয়াল MIME প্রকারের দায়িত্বে রয়েছে এবং আপনি তাদের MIME প্রকারের পৃষ্ঠায় সম্পূর্ণ তালিকা খুঁজে পেতে পারেন৷

যদি একটি ত্রুটি ঘটে বা বৈধতা ব্যর্থ হয়, আপনি একটি ফ্ল্যাশ বার্তা সেট করতে পারেন এবং ব্রাউজারটিকে আপলোড পৃষ্ঠায় ফিরিয়ে আনতে পারেন৷ নিম্নলিখিত ফাংশন একটি ফ্ল্যাশ বার্তা সেট করে এবং একটি পুনঃনির্দেশ সঞ্চালন করে:

function redirect_with_message(string $message, string $type=FLASH_ERROR, string $name='upload', string $location='index.php'): void
{
    flash($name, $message, $type);
    header("Location: $location", true, 303);
    exit;
}

লক্ষ্য করুন যে আমরা flash.php ফাইলে সংজ্ঞায়িত flash() ফাংশন ব্যবহার করি। Flash() ফাংশন একটি সেশন-ভিত্তিক ফ্ল্যাশ বার্তা দেখায়। এখানে ফ্ল্যাশ বার্তা টিউটোরিয়াল দেখুন.

নিম্নলিখিত দেখায় কিভাবে redirection_with_message() ফাংশন ব্যবহার করতে হয়:

if(error) {
   redirect_with_message('An error occurred');
}

রিটার্ন বিবৃতি বর্তমান স্ক্রিপ্ট শেষ হয়.

যেহেতু এই সমস্ত ফাংশন get_mime_type(), format_filesize(), এবং redirect_with_message() পুনঃব্যবহারযোগ্য, আপনি সেগুলি functions.php ফাইলে এইভাবে যুক্ত করতে পারেন:

<?php

/**
 *  Messages associated with the upload error code
 */
const MESSAGES = [
    UPLOAD_ERR_OK => 'File uploaded successfully',
    UPLOAD_ERR_INI_SIZE => 'File is too big to upload',
    UPLOAD_ERR_FORM_SIZE => 'File is too big to upload',
    UPLOAD_ERR_PARTIAL => 'File was only partially uploaded',
    UPLOAD_ERR_NO_FILE => 'No file was uploaded',
    UPLOAD_ERR_NO_TMP_DIR => 'Missing a temporary folder on the server',
    UPLOAD_ERR_CANT_WRITE => 'File is failed to save to disk.',
    UPLOAD_ERR_EXTENSION => 'File is not allowed to upload to this server',
];

/**
 * Return a mime type of file or false if an error occurred
 *
 * @param string $filename
 * @return string | bool
 */
function get_mime_type(string $filename)
{
    $info = finfo_open(FILEINFO_MIME_TYPE);
    if (!$info) {
        return false;
    }

    $mime_type = finfo_file($info, $filename);
    finfo_close($info);

    return $mime_type;
}

/**
 * Return a human-readable file size
 *
 * @param int $bytes
 * @param int $decimals
 * @return string
 */
function format_filesize(int $bytes, int $decimals = 2): string
{
    $units = 'BKMGTP';
    $factor = floor((strlen($bytes) - 1) / 3);

    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $units[(int)$factor];
}


/**
 * Redirect user with a session based flash message
 * @param string $message
 * @param string $type
 * @param string $name
 * @param string $location
 * @return void
 */
function redirect_with_message(string $message, string $type=FLASH_ERROR, string $name='upload', string $location='index.php'): void
{
    flash($name, $message, $type);
    header("Location: $location", true, 303);
    exit;
}

MAX_FILE_SIZE ফর্ম ফিল্ড ব্যবহার করে৷

আপনি যদি ফর্মে একটি ফাইল ইনপুট উপাদানের আগে MAX_FILE_SIZE নামের একটি ক্ষেত্র রাখেন, তাহলে ফাইলের আকার যাচাই করার জন্য PHP upload_max_filesize এর পরিবর্তে সেই মানটি ব্যবহার করবে।

উদাহরণ স্বরূপ:

<form enctype="multipart/form-data" action="upload.php" method="post">
    <div>
        <label for="file">Select a file:</label>
        <input type="hidden" name="MAX_FILE_SIZE" value="10240"/>
        <input type="file" id="file" name="file"/>
    </div>
    <div>
        <button type="submit">Upload</button>
    </div>
</form>

এই উদাহরণে, MAX_FILE_SIZE হল 10KB৷ আপনি 10KB এর চেয়ে বড় ফাইল আপলোড করলে PHP একটি ত্রুটি জারি করবে। যাইহোক, এই ক্ষেত্রটি ম্যানিপুলেট করা সহজ তাই নিরাপত্তার জন্য আপনার কখনই এটির উপর নির্ভর করা উচিত নয়।

মনে রাখবেন আপনি php.ini ফাইলে upload_max_filesize নির্দেশের চেয়ে MAX_FILE_SIZE বড় সেট করতে পারবেন না।

PHP ফাইল আপলোড উদাহরণ

প্রথমত, নিম্নলিখিত ডিরেক্টরি কাঠামো তৈরি করুন:

├── inc
|  ├── flash.php
|  └── functions.php
├── index.php
├── upload.php
└── uploads

দ্বিতীয়ত, index.php ফাইলে নিম্নলিখিত ফাইল আপলোড ফর্ম যোগ করুন:

<?php
session_start();
require_once __DIR__ . '/inc/flash.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="https://www.phptutorial.net/app/css/style.css"/>
    <title>PHP File Upload</title>
</head>
<body>

<?php flash('upload') ?>

<main>
    <form enctype="multipart/form-data" action="upload.php" method="post">
        <div>
            <label for="file">Select a file:</label>
            <input type="file" id="file" name="file"/>
        </div>
        <div>
            <button type="submit">Upload</button>
        </div>
    </form>
</main>
</body>
</html>

index.php ফাইলটিতে একটি ফাইল আপলোড করার জন্য একটি ফর্মও রয়েছে। upload.php ফাইল আপলোড পরিচালনা করবে। তৃতীয়ত, আপলোড করা ফাইলটি প্রক্রিয়া করতে upload.php ফাইলে নিম্নলিখিত কোড যোগ করুন:

<?php

session_start();

require_once __DIR__ . '/inc/flash.php';
require_once __DIR__ . '/inc/functions.php';

const ALLOWED_FILES = [
    'image/png' => 'png',
    'image/jpeg' => 'jpg'
];

const MAX_SIZE = 5 * 1024 * 1024; //  5MB

const UPLOAD_DIR = __DIR__ . '/uploads';


$is_post_request = strtolower($_SERVER['REQUEST_METHOD']) === 'post';
$has_file = isset($_FILES['file']);

if (!$is_post_request || !$has_file) {
    redirect_with_message('Invalid file upload operation', FLASH_ERROR);
}

//
$status = $_FILES['file']['error'];
$filename = $_FILES['file']['name'];
$tmp = $_FILES['file']['tmp_name'];


// an error occurs
if ($status !== UPLOAD_ERR_OK) {
    redirect_with_message($messages[$status], FLASH_ERROR);
}

// validate the file size
$filesize = filesize($tmp);
if ($filesize > MAX_SIZE) {
    redirect_with_message('Error! your file size is ' . format_filesize($filesize) . ' , which is bigger than allowed size ' . format_filesize(MAX_SIZE), FLASH_ERROR);
}

// validate the file type
$mime_type = get_mime_type($tmp);
if (!in_array($mime_type, array_keys(ALLOWED_FILES))) {
    redirect_with_message('The file type is not allowed to upload', FLASH_ERROR);
}
// set the filename as the basename + extension
$uploaded_file = pathinfo($filename, PATHINFO_FILENAME) . '.' . ALLOWED_FILES[$mime_type];
// new file location
$filepath = UPLOAD_DIR . '/' . $uploaded_file;

// move the file to the upload dir
$success = move_uploaded_file($tmp, $filepath);
if ($success) {
    redirect_with_message('The file was uploaded successfully.', FLASH_SUCCESS);
}

redirect_with_message('Error moving the file to the upload folder.', FLASH_ERROR);

কিভাবে upload.php কাজ করে।

1) সেশন শুরু করুন এবং flash.php এবং functions.php ফাইলগুলি অন্তর্ভুক্ত করুন যাতে আমরা উপরে সংজ্ঞায়িত ইউটিলিটি ফাংশনগুলি ব্যবহার করতে পারি:

session_start();
require_once __DIR__ . '/inc/flash.php';
require_once __DIR__ . '/inc/functions.php';

2) একটি অ্যারে সংজ্ঞায়িত করুন যা অনুমোদিত ফাইলগুলি নির্দিষ্ট করে:

const ALLOWED_FILES = [
   'image/png' => 'png',
   'image/jpeg' => 'jpg'
];

3) একটি ধ্রুবক সংজ্ঞায়িত করুন যা সর্বোচ্চ ফাইলের আকার নির্দিষ্ট করে:

const UPLOAD_DIR = __DIR__ . '/uploads';

4) অনুরোধের পদ্ধতিটি POST না হলে বা $_FILES ভেরিয়েবলে ফাইলটি না থাকলে একটি ত্রুটি বার্তা ফেরত দিন:

$is_post_request = strtolower($_SERVER['REQUEST_METHOD']) === 'post';
$has_file = isset($_FILES['file']);

if (!$is_post_request || !$has_file) {
    redirect_with_message('Invalid file upload operation', FLASH_ERROR);
}

5) ত্রুটি, ফাইলের নাম এবং অস্থায়ী ফাইলের নাম সহ আপলোড করা ফাইলের তথ্য পান:

$status = $_FILES['file']['error'];
$filename = $_FILES['file']['name'];
$tmp = $_FILES['file']['tmp_name'];

6) ফাইল আপলোড করতে ব্যর্থ হলে একটি ত্রুটি বার্তা ফেরত দিন:

if ($status !== UPLOAD_ERR_OK) {
    redirect_with_message(MESSAGES[$status], FLASH_ERROR);
}

7) অস্থায়ী ফোল্ডারে ফাইলের আকার পান এবং এটি MAX_SIZE এর সাথে তুলনা করুন৷ আপলোড করা ফাইলের আকার MAX_SIZE এর বেশি হলে, একটি ত্রুটি ইস্যু করুন:

// validate the file size
$filesize = filesize($tmp);
if ($filesize > MAX_SIZE) {
    redirect_with_message('Error! your file size is ' . format_filesize($filesize) . ' , which is bigger than allowed size ' . format_filesize(MAX_SIZE), FLASH_ERROR);
}

8) MIME প্রকারটি পান এবং এটিকে ALLOWED_FILES অ্যারেতে নির্দিষ্ট করা অনুমোদিত ফাইলগুলির MIME প্রকারের সাথে তুলনা করুন; বৈধতা ব্যর্থ হলে একটি ত্রুটি জারি করুন:

$mime_type = get_mime_type($tmp);
if (!in_array($mime_type, array_keys(ALLOWED_FILES))) {
    redirect_with_message('The file type is not allowed to upload', FLASH_ERROR);
}

9) বৈধ ফাইল এক্সটেনশনের সাথে আপলোড করা ফাইল থেকে ফাইলের নাম সংযুক্ত করে একটি নতুন ফাইলের নাম তৈরি করুন।

// set the filename as the basename + extension
$uploaded_file = pathinfo($filename, PATHINFO_FILENAME) . '.' . ALLOWED_FILES[$mime_type];

উল্লেখ্য যে নিম্নলিখিত pathinfo() এক্সটেনশন ছাড়াই ফাইলের নাম ফেরত দেয়:

pathinfo($filename, PATHINFO_FILENAME)

উদাহরণস্বরূপ, যদি $filename হয় example.jpg, তাহলে এটি শুধুমাত্র উদাহরণটি প্রদান করবে।

10) ফাইলটিকে টেম্প ডিরেক্টরি থেকে আপলোড ফোল্ডারে সরান এবং move_uploaded_file() ফাংশনের ফলাফলের উপর নির্ভর করে একটি ত্রুটি বা সাফল্যের বার্তা জারি করুন:

$filepath = UPLOAD_DIR . '/' . $uploaded_file;

// move the file to the upload dir
$success = move_uploaded_file($tmp, $filepath);

if ($success) {
    redirect_with_message('The file was uploaded successfully.', FLASH_SUCCESS);
}

redirect_with_message('Error moving the file to the upload directory.', FLASH_ERROR);

সারসংক্ষেপ

  • একটি ফাইল ইনপুট উপাদান তৈরি করতে type=”file” সহ ইনপুট ব্যবহার করুন এবং ফাইল আপলোড করার অনুমতি দেওয়ার জন্য ফর্মটিতে এনকটাইপ=”multipart/form-data” বৈশিষ্ট্য অন্তর্ভুক্ত করুন।
  • $_FILES অ্যারের মাধ্যমে আপলোড করা ফাইলের তথ্য অ্যাক্সেস করুন।
  • tmp_name ব্যতীত $_FILES-এর তথ্যে কখনই বিশ্বাস করবেন না।
  • সর্বদা $_FILES-এ তথ্য যাচাই করুন।
  • ফাইলটিকে অস্থায়ী ডিরেক্টরি থেকে অন্য ফোল্ডারে সরানোর জন্য move_uploaded_file() ফাংশনটি ব্যবহার করুন।

Leave a Comment

Share this Doc

PHP ফাইল আপলোড (File Upload)

Or copy link

CONTENTS

Subscribe

×
Cancel