PHP – بارگذاری فایل (File Upload)

بارگذاری فایل در PHP

با استفاده از PHP، بارگذاری فایل‌ها به سرور بسیار آسان است. اما با این سهولت، خطراتی نیز همراه است، بنابراین همیشه باید در هنگام اجازه دادن به بارگذاری فایل‌ها احتیاط کنید!

پیکربندی فایل "php.ini"

اولین قدم، اطمینان از پیکربندی PHP برای اجازه دادن به بارگذاری فایل‌ها است.

در فایل “php.ini” خود، به دنبال دستور file_uploads بگردید و آن را به On تنظیم کنید:

file_uploads = On

ایجاد فرم HTML

سپس، یک فرم HTML ایجاد کنید که به کاربران اجازه دهد فایل تصویری که می‌خواهند بارگذاری کنند را انتخاب کنند:

<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>
</body>
</html>

قوانین برای فرم HTML بالا:

  • مطمئن شوید که فرم از method="post" استفاده می‌کند.
  • فرم همچنین به صفت enctype="multipart/form-data" نیاز دارد. این صفت نوع محتوا را هنگام ارسال فرم مشخص می‌کند.
  • بدون رعایت این الزامات، بارگذاری فایل کار نخواهد کرد.

نکات دیگر:

  • صفت type="file" در تگ <input> کنترل انتخاب فایل را نشان می‌دهد و دکمه “Browse” در کنار آن قرار دارد.
  • فرم بالا داده‌ها را به فایلی به نام “upload.php” ارسال می‌کند که در ادامه ایجاد خواهیم کرد.

ایجاد اسکریپت PHP برای بارگذاری

فایل “upload.php” حاوی کد برای بارگذاری یک فایل است:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// بررسی اینکه فایل تصویری واقعی است یا جعلی
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}
?>

توضیحات کد PHP:

  • $target_dir = "uploads/" – دایرکتوری که فایل در آن قرار خواهد گرفت را مشخص می‌کند.
  • $target_file مسیر فایل را که باید بارگذاری شود، مشخص می‌کند.
  • $uploadOk=1 هنوز استفاده نشده است (در ادامه استفاده خواهد شد).
  • $imageFileType پسوند فایل را به صورت کوچک نگه می‌دارد.

بررسی وجود فایل

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

ابتدا، بررسی خواهیم کرد که آیا فایل قبلاً در پوشه “uploads” وجود دارد یا خیر. اگر وجود داشته باشد، پیغام خطا نمایش داده شده و $uploadOk به ۰ تنظیم می‌شود:

// بررسی اینکه فایل قبلاً وجود دارد یا خیر
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

محدود کردن اندازه فایل

فیلد ورودی فایل در فرم HTML ما نام “fileToUpload” است.

حالا، می‌خواهیم اندازه فایل را بررسی کنیم. اگر فایل بزرگ‌تر از ۵۰۰KB باشد، پیغام خطا نمایش داده شده و $uploadOk به ۰ تنظیم می‌شود:

// بررسی اندازه فایل
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

محدود کردن نوع فایل

کد زیر فقط به کاربران اجازه می‌دهد فایل‌های JPG، JPEG، PNG و GIF بارگذاری کنند. سایر انواع فایل‌ها پیغام خطا را نمایش داده و $uploadOk را به ۰ تنظیم می‌کند:

// اجازه دادن به فرمت‌های خاص فایل
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

اسکریپت کامل PHP برای بارگذاری

فایل “upload.php” کامل به صورت زیر خواهد بود:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// بررسی اینکه فایل تصویری واقعی است یا جعلی
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// بررسی اینکه فایل قبلاً وجود دارد یا خیر
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// بررسی اندازه فایل
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// اجازه دادن به فرمت‌های خاص فایل
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// بررسی اینکه آیا $uploadOk به دلیل خطا به ۰ تنظیم شده است
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// اگر همه چیز خوب است، سعی کنید فایل را بارگذاری کنید
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.