آموزش آپلود همزمان چند تصویر با php
آموزش آپلود همزمان چند تصویر با php
در این پست آموزش آپلود همزمان چند تصویر با PHP را برایتان قرار داده ایم.
برای ظاهر برنامه از یک قالب ساده استفاده شده که درک کدهای CSS آن خیلی راحت می باشد.
توضیح کدهای فایل 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 $valid_formats = array("jpg", "JPG", "png", "PNG", "gif", "GIF", "bmp", "BMP"); $max_file_size = 1024 * 100; //100 kb $path = "uploads/"; // Upload directory $count = 0; if (isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { // Loop $_FILES to execute all files foreach ($_FILES['file_upload']['name'] as $f => $name) { if ($_FILES['file_upload']['name'][$f] != "") { if (!file_exists($path . $_FILES["file_upload"]["name"][$f])) { if ($_FILES['file_upload']['error'][$f] == 4) { continue; // Skip file if any error found } $imageInfo = getimagesize($_FILES["file_upload"]["tmp_name"][$f]); $imageWidth = $imageInfo[0]; $imageHeight = $imageInfo[1]; if ($_FILES['file_upload']['error'][$f] == 0) { if ($_FILES['file_upload']['size'][$f] > $max_file_size) { $str = "حجم تصویر انتخاب شده باید کمتر از 100 کیلوبایت باشد"; continue; // Skip large files } elseif (!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)) { $str = "فرمت تصویر انتخاب شده مجاز نمی باشد"; continue; // Skip invalid file formats } elseif ($imageHeight > 200 || $imageWidth > 200) { $str = "اندازه تصویر انتخاب شده باید 1023 در 426 باشد"; continue; } else { // No error found! Move uploaded files if (move_uploaded_file($_FILES["file_upload"]["tmp_name"][$f], $path . $name)) { $count++; // Number of successfully uploaded files $str = $count . " تصویر با موفقیت آپلود شدند "; } } } } else { $str = "تصویری با این نام وجود دارد"; } } else { $str = "شما تصویری را انتخاب نکرده اید"; } } } ?> <div class="content"> <?php if (isset($str)) { echo $str; } ?> <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[]" multiple="multiple"/> </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[] می باشد و دلیل اینکه براکت باز و بسته قرار دادیم این است که چون می خواهیم چند تصویر را همزمان آپلود کنیم باید اسامی تصاویر را به صورت آرایه دریافت کنیم. و نکته دیگری که باید رعایت کنیم این است که باید در تگ input حتما خصوصیت multiple را برابر multiple قرار دهیم تا بتوانیم همزمان چند تصویر را انتخاب کنیم. و یک دکمه نیز درست کردیم.
حال کدهای php مورد نظر را توضیح می دهیم.
در ابتدا فرمت مورد نظر تصویر و اندازه فایل و حجم فایل و محل ذخیره فایل را در متغیرهای مشخص شده تعیین کردیم سپس چک می کنیم که آیا کاربر بر روی دکمه آپلود کلیک کرده یا نه، اگر کلیک کرده بود چون قرار است چند تصویر را همزمان آپلود کنیم از یک foreach استفاده می کنیم و تک تک فایل ها را آپلود می کنیم. در دستور foreach تک تک نام فایل ها را دریافت می کنیم و تک تک آنها را چک می کنیم.
در خط بعدی چک می کنیم که نام فایل خالی نباشد و اگر خالی بود در قسمت else پیغام می دهیم که کاربر تصویری را انتخاب نکرده است. و در خط بعدی نیز چک می کنیم که فایلی با این نام در مسیر دخیره سازی وجود نداشته باشد و در خطوط بعدی با استفاده از تابع getimagesize طول و عرض تصویر را بدست می آوریم و در متغیرهای مربوطه قرار می دهیم.
در خط بعدی چک می کنیم که خطایی وجود نداشته باشد، سپس حجم فایل را چک می کنیم که اگر بیشتر از مقدار تعیین شده بود به کاربر پغام دهیم. در خط بعدی فرمت تصویر مورد نظر را چک می کنیم که در فرمتهایی که تعیین کردیم باشد وگرنه به کاربر پیغام می دهیم. در خط بعدی نیز طول و عرض تصویر را چک می کنیم. در نهایت با استفاده از تابع move_uploaded_file تصویر مورد نظر را آپلود کرده و یکی به مقدار متغیر count اضافه می کنیم و سپس دوباره همین روال برای تصویر بعدی تکرار می شود تا تمامی تصاویر یک به یک آپلود شوند و در نهایت تعداد تصاویر آپلود شده را به کاربر پیغام می دهیم.
توجه : تمامی فایل ها در سورس کد موجود می باشند.
نظر / سوال