آموزش آپلود تصویر با برنامه نویسی شی گرا با PHP
0 0

آموزش آپلود تصویر با برنامه نویسی شی گرا با PHP


آموزش آپلود تصویر با برنامه نویسی شی گرا با PHP

در این پست آموزش آپلود تصویر با برنامه نویسی شی گرا ، با PHP برایتان قرار داده ایم

برای ظاهر برنامه از یک قالب ساده استفاده شده که درک کدهای CSS آن خیلی راحت می باشد.

برای آپلود فایل با استفاده از برنامه نویسی شی گرا در ابتدا باید کلاس مربوطه را ایجاد کنیم. مادر یک فایل با نام upload_image.php کلاس مورد نظر را نوشتیم که کدهای مورد نظر آن به صورت زیر می باشد.

<?php

class UploadImage
{
    public $filename;
    public $type;
    public $size;
    public $target_path;
    private $temp_path;
    public $upload_dir = "uploads/";
    protected $valid_formats = array("jpg", "JPG", "png", "PNG", "gif", "GIF", "bmp", "BMP");
    public $errors = array();
    protected $upload_errors = array(
        UPLOAD_ERR_OK => "خطایی وجود ندارد",
        UPLOAD_ERR_INI_SIZE => "حجم فایل بیشتر از اندازه تعیین شده می باشد",
        UPLOAD_ERR_FORM_SIZE => "حجم فایل بیشتر از اندازه تعیین شده می باشد",
        UPLOAD_ERR_PARTIAL => "اپلود فایل به صورت جزیی می باشد",
        UPLOAD_ERR_NO_FILE => "شما تصویری را انتخاب نکرده اید",
        UPLOAD_ERR_NO_TMP_DIR => "پوشه ذخیره سازی وجود ندارد",
        UPLOAD_ERR_CANT_WRITE => "مجوز نوشتن بر روی سرور وجود ندارد",
        UPLOAD_ERR_EXTENSION => "آپلود فایل ناموفق می باشد"
    );

    public function attach_file($file, $max_file_size, $width, $height)
    {
        if (!empty($file['name'])) {
            $imageInfo = getimagesize($file["tmp_name"]);
            $imageWidth = $imageInfo[0];
            $imageHeight = $imageInfo[1];
        }
        // در ابتدا چک می کنیم که خطایی در فایل ورودی وجود ندارد
        if (!$file || empty($file) || !is_array($file)) {
            $this->errors[] = "تصویری برای آپلود انتخاب نشده است";
            return false;
        } elseif ($file['error'] != 0) {
            // در صورتی که یک خطایی از خطاهای تعریف شده در بالا پیش آمده باشد
            $this->errors[] = $this->upload_errors[$file['error']];
            return false;
        } elseif (!in_array(pathinfo($file['name'], PATHINFO_EXTENSION), $this->valid_formats)) {
            $this->errors[] = "فرمت تصویر انتخاب شده مجاز نمی باشد";
            return false;
        } elseif ($file['size'] > $max_file_size) {
            $this->errors[] = "حجم تصویر انتخاب شده باید کمتر از 100 کیلوبایت باشد";
            return false;
        } elseif ($file && ($imageHeight > $height || $imageWidth > $width)) {
            $this->errors[] = "اندازه تصویر انتخاب شده باید {$width} در {$height} باشد";
            return false;
        } else {
            // مقادیر مورد نظر را در پروپرتی های کلاس ثبت می کنیم.
            $this->temp_path = $file['tmp_name'];
            $this->filename = basename($file['name']);
            $this->type = $file['type'];
            $this->size = $file['size'];
            return true;
        }
    }

    public function save($uploadDir)
    {

        // در ابتدا پروپرتی error را چک می کنیم که خطایی وجود نداشته باشد
        if (!empty($this->errors)) {
            return false;
        }
        // سپس چک می کنیم که محل موقت فایل و نام فایل وجود دارد یا نه
        if (empty($this->filename) || empty($this->temp_path)) {
            $this->errors[] = "محل فایل در دسترس نمی باشد";
            return false;
        }
        $this->upload_dir = $uploadDir;
        $this->target_path = $this->upload_dir . $this->filename;
        // چک می کنیم که تصویری با این نام وجود دارد یا نه
        if (file_exists($this->target_path)) {
            $this->errors[] = "تصویر انتخاب شده " . " با نام " . $this->filename . " وجود دارد ";
            return false;
        }

        // در این مرحله تصویر مورد نظر را ذخیره می کنیم
        if (move_uploaded_file($this->temp_path, $this->target_path)) {
            // Success

            $this->errors[] = "تصویر با موفقیت آپلود شد";
            return true;
        } else {
            $this->errors[] = "شما مجوز نوشتن  تصویر در پوشه را ندارید";
            return false;
        }
    }
}

نام کلاس مورد نظر UploadImage می باشد. در این کلاس چند ویژگی ( Property ) تعریف کردیم. ویژگی اول filename که نام فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Public می باشد. ویژگی دوم type که پسوند فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Public می باشد. ویژگی سوم size که اندازه فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Public می باشد. ویژگی چهارم target_path که مسیر ذخیره فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Public می باشد. ویژگی پنجم temp_path که مسیر ذخیره موقت فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Private می باشد. ویژگی ششم upload_dir که نام پوشه مورد نظربرای ذخیره تصویر را نگهداری می کند که نوع و حوزه آن Public می باشد. که می توانیم از بیرون کلاس نیز این مسیر را تغییر دهیم. ویژگی هفتم valid_format که فرمت های پیش فرض فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Protected می باشد. ویژگی هشتم errors که خطا ها و پیغام های مورد نظر را نگهداری می کند که باید به کاربر نشان داده شود که نوع و حوزه آن Public می باشد. ویژگی نهم upload_errors که خطاهای پیش آمده هنگام آپلود فایل مورد نظر را نگهداری می کند که نوع و حوزه آن Protected می باشد. که خطاهای مورد نظر را درون آن تعریف کرده ایم.

در این کلاس دو متد تعریف کرده ایم که یک به یک توضیح می دهیم.

متد attach_file :

این متد چند ورودی دارد ورودی اول فایل مورد نظر ، ورودی دوم اندازه فایل مورد نظر ، ورودی سوم عرض تصویر مورد نظر و ورودی چهارم طول تصویر مورد نظر که کاربر به راحتی می تواند در هرجایی که از اپلود استفاده می کند این مقادیر را تغییر دهد.

در ابتدا در داخل if چک می کنیم که نام فایل خالی نباشد سپس با استفاده از تابع getimagesize طول و عرض تصور را بدست می آوریم.

در if بعدی اگر خطایی در فایل ورودی وجود ندارد و اگر خطایی وجود داشته باشد آنها را در ویژگی errors ثیت می کنیم. سپس در دستور بعدی فرمت تصویر مورد نظر را چک می کنیم که یکی از فرمت های تعریف شده باشد. و در دستور بعدی طول و عرض تصویر را چک می کنیم. در نهایت اگر هیچ خطایی وجود نداشت مقادیر مورد نظر را در ویژگی های تعریف شده ثبت می کنیم.

متد save :

در ابتدا چک می کنیم که در ویژگی errors هیچ خطایی ثبت نشده باشد سپس چک می کنیم که نام فایل و محل ذخیره موقت فایل خالی نباشند. سپس چک می کنیم که فایلی با این نام در محل ذخیره سازی وجود نداشته باشد. در نهایت اگر هیچ کدام از این شرطها درست نبود با استفاده از تابع move_uploaded_file تصویر مورد نظر را ذخیره می کنیم.

توضیح کدهای فایل index.php

<html>
<head>
    <meta charset="UTF-8">
    <title>آپلود تصویر</title>
    <link href="style.css" type="text/css" rel="stylesheet">
</head>
<bod>
    <div class="wrapper">
        <div class="header">
            <a href="http://www.iranganj.ir"><img style="margin-top: 20px;margin-right: 30px;" src="logo.png"></a>
        </div>
        <div class="main">
            <div class="sidebar">
                <ul>
                    <li>
                        <a href="index.php">صفحه اصلی</a>
                    </li>
                </ul>
            </div>
            <?php
            function output_message_error($message_error = "")
            {
                if (!empty($message_error)) {
                    $output = "<div style='color: #D8000C;background-color: #FFBABA;text-align: right;'>";
                    $output .= $message_error;
                    $output .= "</div>";
                    return $output;
                } else {
                    return "";
                }
            }

            function output_message_success($message = "")
            {
                if (!empty($message)) {
                    $output = "<div style='color: #4F8A10;background-color: #DFF2BF;text-align: right;'>";
                    $output .= $message;
                    $output .= "</div>";
                    return $output;
                } else {
                    return "";
                }
            }

            $message_error = "";
            $message_success = "";
            if (isset($_POST['submit'])) {
                require_once("upload_image.php");
                $photo = new UploadImage();
                $max_file_size = 102400;
                $width = 200;
                $height = 200;
                $photo->attach_file($_FILES['file_upload'], $max_file_size, $width, $height);
                $uploadDir = "uploads/";
                if ($photo->save($uploadDir)) {
                    $message_success = join("<br/>", $photo->errors);
                    $message_success .= "<br/>" . " نام تصویر :" . $photo->filename . "<br/>";
                    $message_success .= " اندازه تصویر به بایت :" . $photo->size . "<br/>";
                    $message_success .= " مسیر ذخیره تصویر :" . $photo->target_path . "<br/>";
                    $message_success .= " پسوند تصویر :" . $photo->type . "<br/>";
                } else {
                    // Failure
                    $message_error = join("<br />", $photo->errors);
                }
            }
            ?>
            <div class="content">
                <?php
                echo output_message_error($message_error);
                echo output_message_success($message_success);
                ?>
                <form action="index.php" enctype="multipart/form-data" method="post">
                    <div>
                        <span><label>تصویری برای خودتان انتخاب کنید</label></span>
                        <span><label>اندازه تصویر انتخاب شده باید 200 در 200 باشد</label></span>

                        <div>
                            <input type="file" name="file_upload"/>
                        </div>
                    </div>
                    <br/>

                    <div>
                        <div class="buttons">
                            <button type="submit" name="submit">بارگذاری</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
        <div class="footer">
            <h4 style="text-align: center;padding: 20px;"><a href="http://www.iranganj.ir">تمامی حقوق متعلق به سایت
                    ایران گنج می باشد</a></h4>
        </div>
    </div>
</bod>
</html>

در این فایل ابتدا یک فرم برای آپلود فایل ایجاد می کنیم که در آموزش های قبلی نحوه ایجاد فرم را یاد گرفتیم و فقط در این قسمت به تفاوت هایی که وجود دارد اشاره می کنیم. اولن تفاوت در تگ فرم می باشد که حتما باید ویژگی enctype مورد نظر را باید برابر multipart/form-data قرار دهیم. همچنین یک تگ input داریم که نوع آن file می باشد چون می خواهیم عمل آپلود را انجام دهیم و نام آن نیز file_upload می باشد و یک دکمه نیز درست کردیم.

حال کدهای php  مورد نظر را توضیح می دهیم.

در ابتدا دو تابع تعریف کردیم که خطاها یا پیغام های مورد نظر را نمایش می دهد که نیاز به توضیح خاصی ندارد، همچنین در برنامه های قبلی این مورد را نیز توضیح داده ایم.

در ابتدا چک می کنیم که آیا کاربر بر روی دکمه آپلود کلیک کرده یا نه، اگر کلیک کرده بود فایل upload_image را وارد کردیم چون که می خواهیم از کلاس مربوطه استفاده کنیم. سپس یک نمونه از کلاس مورد نظر با نام photo ایجاد کردیم. در خط بعدی اندازه فایل را مشخص کردیم و در خط بعدی نیز عرض و طول تصویر را مشخص کردیم. سپس متد attach_file از کلاس UploadImage را فراخوانی کردیم و ورودهای مورد نظر را به متد دادیم حال در متد مربوطه که قبلا توضیحات آن را دادیم چک می شود اگر خطایی وجود نداشته باشد به خ بعدی می رویم در خط بعدی محل ذخیره فایل را مشخص کردیم و سپس متد save را فراخوانی کردیم که اگر این متد نیز به درستی عمل کند و تصویر ذخیره شود پیغام های مورد نظر را به کاربر نشان می دهیم و گرنه خطاهای پیش آمده را به کاربر نمایش می دهیم.

توجه : تمامی فایل ها در سورس کد موجود می باشند.

دانلود

نویسنده حسین فتحی
گروه مطلب PHP
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۲۵ تیر ۱۳۹۴
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران VIP
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.
خرید VIP
امکان خرید از درگاه های بانکی و حساب مجازی

برای دانلود بعد از خرید به همین صفحه برگردید تا لینک های دانلود نمایش داده شود

نظر / سوال

Captcha