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

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

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

در آین آموزش یاد خواهیم گرفت که چگونه یک فایل تصویری را با استفاده از Php آپلود کرده و در دیتابیس Mysql ذخیره کنیم .



ویدیوی پروژه


ساختار جدول images در دیتابیس upload_images

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

باید یکسری محدودیت ها برای آپلود فایل تعیین کنیم مثل:

  1. محدودیت حجم فایل
  2. محدودیت فرمت فایل با استفاده از پسوند فایل مثل 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>


دانلود سورس + دیتابیس آپلود عکس در PHP و ذخیره در دیتابیس

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us