آپلود فایل‌ها در PHP

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

ایجاد یک فرم بارگذاری فایل

اجازه دادن به کاربران برای بارگذاری فایل از فرم بسیار مفید است.

لطفاً فرم زیر را که برای بارگذاری فایل‌ها طراحی شده است، مشاهده کنید:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">نام فایل:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

لطفاً توجه داشته باشید که اطلاعات زیر در مورد این فرم است:

ویژگی enctype برچسب <form> مشخص می‌کند که در ارسال فرم باید از چه نوع نوع محتوایی استفاده شود. در صورتی که فرم نیاز به داده‌های باینری دارد، مانند محتوای فایل، لطفاً از "multipart/form-data" استفاده کنید.

ویژگی type="file" برچسب <input> مشخص می‌کند که باید ورودی به عنوان فایل در نظر گرفته شود. به عنوان مثال، هنگام مشاهده پیش‌نمایش در مرورگر، یک دکمه مشاهده در کنار فیلد ورودی وجود دارد.

Note:اجازه دادن به کاربران برای بارگذاری فایل یک ریسک امنیتی بزرگ است. لطفاً فقط به کاربران قابل اعتماد اجازه دهید تا عملیات بارگذاری فایل را انجام دهند.

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

فایل "upload_file.php" شامل کد برای بارگذاری فایل‌هاست:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "+خطا: " . $_FILES["file"]["error"] . "+<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "+محل ذخیره شده: " . $_FILES["file"]["tmp_name"];
  }
?>

با استفاده از آرایه جهانی PHP $_FILES، می‌توانید فایل از کامپیوتر مشتری به سرور远程 آپلود کنید.

اولین پارامتر نام input فرم است، دومین زیر مجموعه می‌تواند "name", "type", "size", "tmp_name" یا "error" باشد. مثل این:

  • $_FILES["file"]["name"] - نام فایل آپلود شده
  • $_FILES["file"]["type"] - نوع فایل آپلود شده
  • $_FILES["file"]["size"] - اندازه فایل آپلود شده به صورت بایت
  • $_FILES["file"]["tmp_name"] - نام نسخه موقتی فایل ذخیره شده در سرور
  • $_FILES["file"]["error"] - کد خطایی که به دلیل آپلود فایل ایجاد شده است

این یک روش بسیار ساده برای آپلود فایل است. به دلیل دلایل امنیتی، باید محدودیت‌هایی را اضافه کنید که چه کاربرانی مجاز به آپلود فایل هستند.

محدودیت‌های آپلود

در این اسکریپت، ما محدودیت‌های اضافی برای آپلود فایل را اضافه کرده‌ایم. کاربران فقط می‌توانند فایل‌های .gif یا .jpeg آپلود کنند و اندازه فایل باید کمتر از 20 کیلوبایت باشد:

<?php
if ((($_FILES["file"]["type"] == "+image/gif)))
|| ($_FILES["file"]["type"] == "+image/jpeg"))
|| ($_FILES["file"]["type"] == "+image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "+خطا: " . $_FILES["file"]["error"] . "+<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "+محل ذخیره شده: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Note:برای IE، شناسایی نوع فایل jpg باید pjpeg باشد، برای FireFox باید jpeg باشد.

ذخیره فایل آپلود شده

در مثال بالا یک نسخه موقتی از فایل آپلود شده در پوشه موقتی سرور PHP ایجاد شده است.

این فایل کپی موقتی در پایان اسکریپت از بین می‌رود. برای ذخیره فایل آپلود شده، باید آن را به مکان دیگری کپی کنیم:

<?php
if ((($_FILES["file"]["type"] == "+image/gif)))
|| ($_FILES["file"]["type"] == "+image/jpeg"))
|| ($_FILES["file"]["type"] == "+image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "+کد بازگشت: " . $_FILES["file"]["error"] . "+<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

The script above checks if the file exists, and if it does not exist, it copies the file to the specified folder.

Note:This example saved the file to a new folder named "upload".