CodeIgniter একটি শক্তিশালী ফাইল আপলোড লাইব্রেরি সরবরাহ করে, যা ফাইল আপলোড এবং ম্যানেজমেন্ট সহজ করে। এটি ইমেজ, ডকুমেন্ট, বা অন্য কোনো ফাইল সুরক্ষিতভাবে সার্ভারে সংরক্ষণ করার জন্য প্রয়োজনীয় সকল বৈশিষ্ট্য সরবরাহ করে।
একটি Controller তৈরি করুন, যা ফাইল আপলোড পরিচালনা করবে।
namespace App\Controllers;
use CodeIgniter\Controller;
class FileUploadController extends Controller {
public function index() {
return view('file_upload');
}
public function upload() {
$file = $this->request->getFile('userfile');
if ($file->isValid() && !$file->hasMoved()) {
// ফাইল সংরক্ষণ করা
$file->move(WRITEPATH . 'uploads');
// সফল বার্তা
return "File uploaded successfully: " . $file->getName();
} else {
// ত্রুটি বার্তা
return "Failed to upload file.";
}
}
}
app/Views/file_upload.php
নামে একটি View তৈরি করুন এবং একটি ফাইল আপলোড ফর্ম যোগ করুন।
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form action="<?= site_url('fileupload/upload'); ?>" method="post" enctype="multipart/form-data">
<label for="userfile">Choose File:</label>
<input type="file" name="userfile" id="userfile"><br><br>
<button type="submit">Upload</button>
</form>
</body>
</html>
app/Config/Routes.php
ফাইলে Controller এর জন্য রাউট যোগ করুন।
$routes->get('fileupload', 'FileUploadController::index');
$routes->post('fileupload/upload', 'FileUploadController::upload');
CodeIgniter এ ফাইল আপলোড কাস্টমাইজ করার জন্য কিছু গুরুত্বপূর্ণ সেটিংস প্রদান করে।
if ($file->isValid() && !$file->hasMoved()) {
$validTypes = ['image/jpeg', 'image/png', 'application/pdf'];
if (in_array($file->getMimeType(), $validTypes)) {
$file->move(WRITEPATH . 'uploads');
return "File uploaded successfully: " . $file->getName();
} else {
return "Invalid file type.";
}
}
if ($file->isValid() && !$file->hasMoved()) {
$maxSize = 2048; // 2 MB (KB তে)
if ($file->getSize() <= $maxSize * 1024) {
$file->move(WRITEPATH . 'uploads');
return "File uploaded successfully.";
} else {
return "File size exceeds the limit.";
}
}
if ($file->isValid() && !$file->hasMoved()) {
$newName = $file->getRandomName();
$file->move(WRITEPATH . 'uploads', $newName);
return "File uploaded successfully with name: " . $newName;
}
আপলোড করা ফাইলগুলো WRITEPATH এর মধ্যে সংরক্ষিত হয়, যা writable/uploads
ফোল্ডারে থাকে।
$files = directory_map(WRITEPATH . 'uploads');
print_r($files);
return $this->response->download(WRITEPATH . 'uploads/' . $fileName, null);
unlink(WRITEPATH . 'uploads/' . $fileName);
CodeIgniter এর Validation Library ব্যবহার করে ফাইল আপলোডের সময় ইনপুট যাচাই করা যায়।
$validation = \Config\Services::validation();
$validation->setRules([
'userfile' => [
'label' => 'File',
'rules' => 'uploaded[userfile]|mime_in[userfile,image/jpeg,image/png]|max_size[userfile,2048]'
]
]);
if (!$validation->withRequest($this->request)->run()) {
return redirect()->back()->withInput()->with('errors', $validation->getErrors());
}
writable
ফোল্ডার ব্যবহার করুন।CodeIgniter এ ফাইল আপলোড একটি সহজ এবং সুরক্ষিত প্রক্রিয়া। ফাইল আপলোড করতে Controller, View, এবং Routes সঠিকভাবে সেটআপ করুন। কাস্টম নাম, টাইপ যাচাই, এবং সাইজ সীমাবদ্ধতার মাধ্যমে ফাইল আপলোড ম্যানেজমেন্ট আরও কার্যকর এবং নিরাপদ করা যায়।
CodeIgniter এ File Uploading Class একটি শক্তিশালী টুল, যা ব্যবহারকারীদের ফাইল (যেমন ইমেজ, ডকুমেন্ট, ভিডিও) সার্ভারে আপলোড করার জন্য সহজ এবং সুরক্ষিত উপায় প্রদান করে। এটি ফাইলের সাইজ, টাইপ, এবং অন্যান্য প্যারামিটার যাচাই করার সুবিধা দেয়।
আপনার প্রজেক্ট ডিরেক্টরির মধ্যে একটি ফোল্ডার তৈরি করুন যেখানে ফাইলগুলো আপলোড হবে। উদাহরণস্বরূপ:
project_root/uploads/
FileUpload.php
নামে একটি Controller তৈরি করুন এবং নিম্নলিখিত কোড যোগ করুন:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class FileUpload extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper(['form', 'url']); // ফর্ম এবং URL হেল্পার লোড
}
public function index() {
$this->load->view('file_upload_form'); // ফর্ম ভিউ লোড
}
public function upload() {
$config['upload_path'] = './uploads/'; // আপলোড ফোল্ডারের পাথ
$config['allowed_types'] = 'jpg|png|jpeg|gif'; // অনুমোদিত ফাইল টাইপ
$config['max_size'] = 2048; // ফাইলের সর্বোচ্চ সাইজ (KB)
$config['file_name'] = time(); // ফাইলের নাম স্বয়ংক্রিয়ভাবে
$this->load->library('upload', $config); // Upload লাইব্রেরি লোড
if (!$this->upload->do_upload('userfile')) { // ফাইল আপলোড চেক
$error = ['error' => $this->upload->display_errors()]; // এরর মেসেজ
$this->load->view('file_upload_form', $error); // এরর সহ ফর্ম দেখান
} else {
$data = ['upload_data' => $this->upload->data()]; // সফল আপলোডের ডেটা
$this->load->view('file_upload_success', $data); // সফল মেসেজ দেখান
}
}
}
file_upload_form.php
)<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
<h2>Upload a File</h2>
<?php if (isset($error)) echo $error; ?> <!-- এরর দেখান -->
<?php echo form_open_multipart('fileupload/upload'); ?> <!-- ফাইল আপলোড ফর্ম -->
<input type="file" name="userfile" size="20">
<br><br>
<input type="submit" value="Upload">
</form>
</body>
</html>
file_upload_success.php
)<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Successful</title>
</head>
<body>
<h2>File Uploaded Successfully!</h2>
<p>File Name: <?php echo $upload_data['file_name']; ?></p>
<p>File Size: <?php echo $upload_data['file_size']; ?> KB</p>
<p>File Type: <?php echo $upload_data['file_type']; ?></p>
</body>
</html>
প্যারামিটার | বর্ণনা |
---|---|
upload_path | ফাইল আপলোড করার ফোল্ডারের পাথ। |
allowed_types | ফাইলের অনুমোদিত টাইপ (যেমন `jpg |
max_size | ফাইলের সর্বোচ্চ সাইজ (KB)। |
max_width | ইমেজের সর্বোচ্চ প্রস্থ (পিক্সেলে)। |
max_height | ইমেজের সর্বোচ্চ উচ্চতা (পিক্সেলে)। |
file_name | ফাইলের নতুন নাম সেট করতে। |
encrypt_name | ফাইলের নাম এনক্রিপ্ট করতে (TRUE/FALSE)। |
আপলোডের সময় কোনো সমস্যা হলে এরর মেসেজ পাওয়ার জন্য display_errors()
মেথড ব্যবহার করা হয়। উদাহরণ:
$error = $this->upload->display_errors();
if (!$this->upload->do_upload('userfile')) {
$error = ['error' => $this->upload->display_errors()];
$this->load->view('file_upload_form', $error);
} else {
$upload_data = $this->upload->data();
if ($upload_data['image_width'] > 1024 || $upload_data['image_height'] > 768) {
unlink($upload_data['full_path']); // অপ্রয়োজনীয় ফাইল ডিলিট করুন
$error = "Image dimensions exceed 1024x768.";
$this->load->view('file_upload_form', ['error' => $error]);
} else {
$this->load->view('file_upload_success', ['upload_data' => $upload_data]);
}
}
CodeIgniter এর File Uploading Class দ্রুত এবং নিরাপদে ফাইল আপলোড করার একটি আদর্শ সমাধান।
CodeIgniter-এ Multiple File Uploading খুবই সহজ এবং কার্যকরী। এটি ইউজারদের একাধিক ফাইল একসাথে আপলোড করার সুবিধা দেয়। CodeIgniter এর বিল্ট-ইন ফাইল আপলোড লাইব্রেরি ব্যবহার করে এটি সহজে করা যায়।
আপনার ভিউ ফাইলে একটি ফাইল আপলোড ফর্ম তৈরি করুন। এটি HTML-এর multiple
অ্যাট্রিবিউট ব্যবহার করে একাধিক ফাইল নির্বাচন করতে দেয়।
উদাহরণ:
<form action="<?= base_url('upload/multiple') ?>" method="post" enctype="multipart/form-data">
<label for="files">Choose multiple files:</label>
<input type="file" name="files[]" multiple>
<button type="submit">Upload</button>
</form>
app/Config/Routes.php
ফাইলে একটি নতুন রাউট যোগ করুন:
$routes->post('upload/multiple', 'UploadController::multiple');
একটি কন্ট্রোলার তৈরি করুন (যেমন: UploadController.php
) এবং ফাইল আপলোড লজিক যোগ করুন।
কন্ট্রোলার উদাহরণ:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class UploadController extends Controller
{
public function multiple()
{
$files = $this->request->getFiles(); // সমস্ত ফাইল রিট্রিভ
foreach ($files['files'] as $file) {
if ($file->isValid() && !$file->hasMoved()) {
// ফাইল আপলোড করা
$file->move(WRITEPATH . 'uploads', $file->getClientName());
}
}
return "Files have been uploaded successfully!";
}
}
আপনার writable/uploads
ফোল্ডার নিশ্চিত করুন এবং সেটি রাইটেবল করুন।
Linux-এ:
chmod -R 0777 writable/uploads
আপলোড করার সময় ফাইলের ধরন বা সাইজ যাচাই করার জন্য ভ্যালিডেশন যোগ করতে পারেন।
ভ্যালিডেশন সহ কন্ট্রোলার উদাহরণ:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class UploadController extends Controller
{
public function multiple()
{
$files = $this->request->getFiles();
$uploadedFiles = [];
foreach ($files['files'] as $file) {
if ($file->isValid() && !$file->hasMoved()) {
// ফাইল ভ্যালিডেশন
if ($file->getSize() <= 2048000 && in_array($file->getExtension(), ['jpg', 'png', 'gif'])) {
$file->move(WRITEPATH . 'uploads', $file->getClientName());
$uploadedFiles[] = $file->getClientName();
}
}
}
if (count($uploadedFiles) > 0) {
return "Uploaded Files: " . implode(', ', $uploadedFiles);
} else {
return "No valid files to upload.";
}
}
}
আপলোড হওয়া ফাইলগুলোর লিস্ট দেখাতে চাইলে, writable/uploads
ডিরেক্টরি থেকে ফাইল লিস্ট রিট্রিভ করতে পারেন।
উদাহরণ:
public function listFiles()
{
$files = array_diff(scandir(WRITEPATH . 'uploads'), ['.', '..']);
return view('file_list', ['files' => $files]);
}
মেথড/প্রপার্টি | কাজ |
---|---|
$this->request->getFiles() | সমস্ত ফাইল রিট্রিভ করে। |
$file->isValid() | ফাইলটি বৈধ কিনা যাচাই করে। |
$file->hasMoved() | ফাইলটি ইতিমধ্যে মুভ করা হয়েছে কিনা যাচাই করে। |
$file->getClientName() | ফাইলের মূল নাম রিট্রিভ করে। |
$file->getExtension() | ফাইলের এক্সটেনশন রিট্রিভ করে। |
$file->getSize() | ফাইলের সাইজ (বাইটে) রিট্রিভ করে। |
$file->move($path, $name) | নির্দিষ্ট ডিরেক্টরিতে ফাইলটি সংরক্ষণ করে। |
writable/uploads
ফোল্ডার রাইটেবল।php.ini
ফাইলে upload_max_filesize
এবং post_max_size
বাড়ান।upload_max_filesize = 5M
post_max_size = 10M
CodeIgniter-এ Multiple File Uploading প্রক্রিয়াটি সহজ এবং কার্যকর। ভ্যালিডেশন এবং কাস্টমাইজেশনের মাধ্যমে এটি আরও নিরাপদ এবং ব্যবহারবান্ধব করা যায়। এই পদ্ধতি ব্যবহার করে আপনি সহজেই ইউজারের একাধিক ফাইল আপলোডের প্রয়োজনীয়তা পূরণ করতে পারবেন।
CodeIgniter ফ্রেমওয়ার্কে ফাইল আপলোড করার জন্য একটি বিল্ট-ইন File Uploading Class রয়েছে। এই ক্লাস ব্যবহার করে ফাইল আপলোড এবং তার ভ্যালিডেশন সহজে করা যায়। ফাইল ভ্যালিডেশন সঠিকভাবে পরিচালনা করলে ব্যবহারকারীর ভুল ইনপুট বা অবৈধ ফাইল থেকে সিস্টেম সুরক্ষিত থাকে।
ফাইল আপলোড প্রক্রিয়া পরিচালনার জন্য একটি Controller তৈরি করুন।
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class FileUpload extends Controller {
public function upload() {
helper(['form', 'url']);
// ফাইল ভ্যালিডেশন নিয়ম
$rules = [
'file' => 'uploaded[file]|max_size[file,2048]|ext_in[file,jpg,jpeg,png,gif]'
];
if (!$this->validate($rules)) {
// ত্রুটি বার্তা
return view('upload_form', [
'validation' => $this->validator
]);
} else {
$file = $this->request->getFile('file');
if ($file->isValid() && !$file->hasMoved()) {
$file->move(WRITEPATH . 'uploads');
return view('upload_form', ['success' => 'File uploaded successfully!']);
} else {
return view('upload_form', ['error' => $file->getErrorString()]);
}
}
}
}
$rules = [
'file' => 'uploaded[file]|max_size[file,2048]|ext_in[file,jpg,jpeg,png,gif]|mime_in[file,image/jpg,image/jpeg,image/png,image/gif]'
];
app/Views/upload_form.php
ফাইল তৈরি করুন:
<!DOCTYPE html>
<html>
<head>
<title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<!-- ত্রুটি বার্তা -->
<?php if (isset($validation)): ?>
<div style="color: red;">
<?= $validation->listErrors(); ?>
</div>
<?php endif; ?>
<!-- সফল বার্তা -->
<?php if (isset($success)): ?>
<div style="color: green;">
<?= $success; ?>
</div>
<?php endif; ?>
<!-- ফর্ম -->
<form action="/fileupload/upload" method="post" enctype="multipart/form-data">
<?= csrf_field(); ?>
<label for="file">Choose a file:</label>
<input type="file" name="file" id="file">
<button type="submit">Upload</button>
</form>
<!-- ত্রুটি -->
<?php if (isset($error)): ?>
<div style="color: red;">
<?= $error; ?>
</div>
<?php endif; ?>
</body>
</html>
uploaded[file]
রুল ব্যবহার করুন।max_size[file,2048]
দিয়ে সাইজ সীমা বাড়ান।ext_in[file,jpg,png]
এবং mime_in
রুল ব্যবহার করুন।সার্ভারের php.ini
ফাইলের কনফিগারেশন পরিবর্তন করুন:
upload_max_filesize = 5M
post_max_size = 8M
if ($file->hasMoved()) {
echo "File already moved!";
}
if (!$file->isValid()) {
echo $file->getErrorString();
}
আপনার ফাইল সংরক্ষণের জন্য কাস্টম লোকেশন নির্ধারণ করতে পারেন:
$file->move(WRITEPATH . 'custom_uploads');
$file->move(WRITEPATH . 'uploads', 'new_filename.jpg');
আপলোডকৃত ফাইল থেকে বিস্তারিত তথ্য পেতে পারেন:
$file = $this->request->getFile('file');
echo $file->getName(); // ফাইলের নাম
echo $file->getSize(); // সাইজ (বাইটে)
echo $file->getExtension(); // এক্সটেনশন
echo $file->getMimeType(); // MIME টাইপ
CodeIgniter-এ ফাইল ভ্যালিডেশন এবং Errors হ্যান্ডলিং একটি শক্তিশালী ফিচার। এটি ব্যবহারকারীর অবৈধ ইনপুট এবং সিস্টেমের ডেটা ক্ষতির ঝুঁকি কমায়। সঠিকভাবে ফাইল ভ্যালিডেশন এবং Errors হ্যান্ডলিং করলে অ্যাপ্লিকেশনের নিরাপত্তা এবং কার্যকারিতা বৃদ্ধি পায়।
CodeIgniter ফ্রেমওয়ার্কের মাধ্যমে ইমেজ ম্যানিপুলেশন যেমন Resizing, Cropping, Rotating, এবং Watermarking সহজেই করা যায়। এটি করার জন্য CodeIgniter বিল্ট-ইন Image Manipulation Library প্রদান করে।
লাইব্রেরি ব্যবহারের জন্য আপনাকে এটি লোড করতে হবে।
$this->load->library('image_lib');
Controller কোড:
public function resizeImage()
{
// Config সেট করুন
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/sample.jpg'; // মূল ইমেজ
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 200; // নতুন প্রস্থ
$config['height'] = 200; // নতুন উচ্চতা
// লাইব্রেরি লোড এবং কনফিগারেশন সেট করা
$this->load->library('image_lib', $config);
// রিসাইজ করার জন্য লাইব্রেরি চালু
if ($this->image_lib->resize()) {
echo "Image resized successfully!";
} else {
echo $this->image_lib->display_errors();
}
}
./uploads/sample.jpg
ডিরেক্টরিতে থাকতে হবে।Controller কোড:
public function cropImage()
{
// Config সেট করুন
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/sample.jpg'; // মূল ইমেজ
$config['maintain_ratio'] = FALSE;
$config['x_axis'] = 50; // X-অক্ষ থেকে শুরু
$config['y_axis'] = 50; // Y-অক্ষ থেকে শুরু
$config['width'] = 200; // ক্রপ প্রস্থ
$config['height'] = 200; // ক্রপ উচ্চতা
// লাইব্রেরি লোড এবং কনফিগারেশন সেট করা
$this->load->library('image_lib', $config);
// ক্রপ করার জন্য লাইব্রেরি চালু
if ($this->image_lib->crop()) {
echo "Image cropped successfully!";
} else {
echo $this->image_lib->display_errors();
}
}
Controller কোড:
public function rotateImage()
{
// Config সেট করুন
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/sample.jpg'; // মূল ইমেজ
$config['rotation_angle'] = '90'; // ঘোরানোর কোণ (90, 180, 270)
// লাইব্রেরি লোড এবং কনফিগারেশন সেট করা
$this->load->library('image_lib', $config);
// রোটেট করার জন্য লাইব্রেরি চালু
if ($this->image_lib->rotate()) {
echo "Image rotated successfully!";
} else {
echo $this->image_lib->display_errors();
}
}
Controller কোড:
public function watermarkImage()
{
// Config সেট করুন
$config['image_library'] = 'gd2';
$config['source_image'] = './uploads/sample.jpg'; // মূল ইমেজ
$config['wm_text'] = 'Sample Watermark'; // টেক্সট ওয়াটারমার্ক
$config['wm_type'] = 'text';
$config['wm_font_path'] = './system/fonts/texb.ttf'; // ফন্ট ফাইল
$config['wm_font_size'] = '16';
$config['wm_font_color'] = 'ffffff'; // সাদা রঙ
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
// লাইব্রেরি লোড এবং কনফিগারেশন সেট করা
$this->load->library('image_lib', $config);
// ওয়াটারমার্ক যোগ করার জন্য লাইব্রেরি চালু
if ($this->image_lib->watermark()) {
echo "Watermark added successfully!";
} else {
echo $this->image_lib->display_errors();
}
}
যদি একাধিক ইমেজ প্রসেস করতে হয়, তবে প্রতিবার লাইব্রেরি রিসেট করুন:
$this->image_lib->clear();
source_image
এর পাথ সঠিক কিনা নিশ্চিত করুন।chmod 777
ব্যবহার করতে পারেন)।অপশন | বিবরণ |
---|---|
image_library | ইমেজ প্রসেসিং লাইব্রেরি (যেমন: gd2 , imagemagick ) |
source_image | মূল ইমেজ ফাইলের পাথ |
new_image | প্রসেসড ইমেজ সংরক্ষণের পাথ |
maintain_ratio | অনুপাত বজায় রাখবে কিনা (TRUE/FALSE) |
width | ইমেজের প্রস্থ |
height | ইমেজের উচ্চতা |
rotation_angle | ঘোরানোর কোণ (যেমন: 90, 180) |
wm_text | ওয়াটারমার্ক টেক্সট |
wm_type | ওয়াটারমার্ক টাইপ (টেক্সট বা ইমেজ) |
CodeIgniter-এর Image Manipulation Library ব্যবহার করে আপনি সহজেই ইমেজ রিসাইজ, ক্রপ, রোটেট, এবং ওয়াটারমার্ক যুক্ত করতে পারেন। এটি ইমেজ প্রসেসিং-এর জন্য একটি শক্তিশালী এবং ব্যবহার-বান্ধব সমাধান প্রদান করে।
Read more