چگونه فایل تصویری در PHP آپلود و در پایگاه داده ذخیره کنیم ( بروزرسانی دوم )

چگونه فایل تصویری در PHP آپلود و در پایگاه داده ذخیره کنیم – بارگذاری تصاویر / فیلم ها در دیتابیس و نمایش آن با استفاده از PHP .
در آین آموزش یاد خواهیم گرفت که چگونه یک فایل تصویری را با استفاده از Php آپلود کرده و در دیتابیس Mysql ذخیره کنیم .
ویدیوی پروژه
ساختار جدول images در دیتابیس upload_images

باید یکسری محدودیت ها برای آپلود فایل تعیین کنیم مثل:
- محدودیت حجم فایل
- محدودیت فرمت فایل با استفاده از پسوند فایل مثل jpg
اسکریپت functions.php
یکسری توابع کاربردی برای مدیریت بهتر آپلود و ذخیره در دیتابیس
<?php
define("UPLOAD_PATH", __DIR__ . "/upload/");
define("UPLOAD_LIMITS", [
"size" => 500000,
"formats" => ["png", "jpg", "gif"]
]);
function get_limitUploadMessage()
{
$formats = join(" , ", UPLOAD_LIMITS['formats']);
$size = round(UPLOAD_LIMITS['size'] / 1000);
$message = " فرمت های مجاز {$formats} و حداکثر حجم فایل {$size} کیلوبایت";
return $message;
}
function uploadPathType(string | null $type = null): string
{
$type = strtoupper($type ?? "DISK");
$result = "";
switch ($type) {
case "DISK":
$result = realpath(UPLOAD_PATH);
$result .= DIRECTORY_SEPARATOR;
break;
case "HTTP":
$result = str_replace(__DIR__, "", UPLOAD_PATH);
break;
}
return $result;
}
function insert_image($theFile, $new_name)
{
$row = [];
$mysqli = new mysqli("localhost", "root", "", "upload_images");
if ($mysqli->connect_error) {
die("MYSQL ISSUE : " . $mysqli->connect_error);
}
$mysqli->set_charset("utf8");
$stmt = $mysqli->stmt_init();
$upload_path = uploadPathType("disk") . "{$new_name}";
$result_move_file = move_uploaded_file($theFile['tmp_name'], $upload_path);
if (!$result_move_file) {
die("خطایی حین انتقال فایل در دیسک به وجود آمده");
}
$upload_path = uploadPathType("http") . "{$new_name}";
$finalData = [
"original_name" => $theFile['name'],
"new_name" => $new_name,
"upload_path" => $upload_path
];
$query = "INSERT INTO `images` (original_name , new_name , path) VALUES (? , ? , ?)";
$inserted_id = 0;
$stmt->prepare($query);
$stmt->bind_param('sss', ...array_values($finalData));
if ($stmt->execute()) {
$inserted_id = $stmt->affected_rows ? $stmt->insert_id : 0;
}
$stmt->close();
$mysqli->close();
if($inserted_id){
$finalData['id'] = $inserted_id;
$row = $finalData;
}
return $row;
}
function validateFile(array $theFile): bool
{
$result = false;
if ($theFile['error']) {
die("خطایی حین آپلود فایل پیش آمده ");
}
$filename = $theFile['name'];
$filesize = $theFile['size'];
$extension = @pathinfo($filename)['extension'] ?? "";
if (UPLOAD_LIMITS['size'] < $filesize) return $result;
else if (!in_array($extension, UPLOAD_LIMITS['formats'])) return $result;
$result = true;
return $result;
}
function generate_new_file_name(string $extension)
{
$result = "file_" . time() . "." . "{$extension}";
return $result;
}
اسکریپت index.php
فرم آپلود در این اسکریپت وجود دارد
<?php
require_once "functions.php";
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>آپلود تصویر در PHP و نمایش آن</title>
<link rel="stylesheet" href="<?= dirname($_SERVER['SCRIPT_NAME']) . "/css/style.css"?>">
</head>
<body>
<a href="https://rapidcode.ir" class="intro" target="_blank">رپید کد - کتابخانه مجازی برنامه نویسان</a>
<form action="<?= dirname($_SERVER['SCRIPT_NAME']) ?>/upload.php" method="post" enctype="multipart/form-data">
<p><?= get_limitUploadMessage() ?></p>
<input type="file" name="the_file" id="the_file">
<input type="submit" value="آپلود">
</form>
</body>
</html>
اسکریپت upload.php
مراحل اعتبار سنجی و اعمال محدودیت ها و همچنین ذخیره فایل در دیسک و دیتابیس را بر عهده دارد .
<?php
require_once "functions.php";
if (!empty($_FILES['the_file'])) {
$theFile = isset($_FILES['the_file'][0]) ? $_FILES['the_file'][0] : $_FILES['the_file'];
$result = validateFile($theFile);
if ($result) {
$extension = @pathinfo($theFile['name'])['extension'];
if (!$extension) {
die("پسوند ناشناخته");
}
$new_name = generate_new_file_name($extension);
$row = insert_image($theFile, $new_name);
if (!$row) {
die("ذخیره تصویر در دیتابیس با خطا مواجه شد");
}
} else {
$limitUploadMessage = get_limitUploadMessage();
die("<p dir=\"rtl\">فایل آپلود نگردید : دلیل آپلود می تواند یکی از این شرایط باشد {$limitUploadMessage}</p>");
}
} else {
die("هیچ فایل معتبری آپلود نشد");
}
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>نمایش تصویر</title>
<link rel="stylesheet" href="<?= dirname($_SERVER['SCRIPT_NAME']) . "/css/style.css" ?>">
</head>
<body>
<a href="https://rapidcode.ir" class="intro" target="_blank">رپید کد - کتابخانه مجازی برنامه نویسان</a>
<?php if ($row) : ?>
<?php $file_link = dirname($_SERVER['SCRIPT_NAME']) . $row['upload_path'] ?>
<h1>تصویر آپلود شده</h1>
<img width="250" src="<?= $file_link ?>" alt="تصویر آپلود شده"><br>
<a style="font-size:xx-large" href="<?= $file_link ?>">لینک فایل</a>
<?php endif; ?>
</body>
</html>
قبل استفاده از سورس وارد اسکریپت functions.php شده و در تابع insert_image اطلاعات دیتابیس خود را تنظیم کنید .
ارسال نظر