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

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

از مواردی که در آپلود فایل در PHP باید رعایت کرد موارد زیر می باشد

  • در پی اچ پی نصب شده روی سیستم فایل php.ini را بررسی نمایید که آیا مجوز آپلود فایل را دارید یا نه (file_uploads = On)
  • حجم فایل های ارسالی را حتما بررسی کرده و برای حجم فایل محدودیت قرار دهید.
  • فرمت فایل های آپلودی را چک کنید و برای بررسی نوع فایل حتما از mime type استفاده کنید. چرا که اگر شما فقط به بررسی پسوند فایل اکتفا کنید، به راحتی می توان با تغییر پسوند فایل، فایل های مخرب و غیر مجاز را هم ارسال کرد.
  • متود فرم مورد استفاده در آپلود باید post باشد.
  • در فرم استفاده شده حتما از اتریبیوت enctype=”multipart/form-data” استفاده کنید.
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
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;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} 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.";
  }
}
?>

در ادامه به بررسی بخش های مختلف کدهای بالا می پردازیم.

بررسی فرمت در آپلود فایل PHP

آپلود فایل را به فرمت های JPG, JPEG, PNG, و GIF محدود می کنیم و در صورت ارسال فایل هایی غیر از این فرمت ها، علاوه بر نمایش ارور مناسب به متغیر uploadOk مقدار 0 را می دهیم.

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
} 

بررسی تکراری بودن فایل

در این فرم این پیش بینی شده که عکس های ارسالی نباد تکراری باشد. که این نیز عملا بوسیله فانکشن file_exists انجام می شود.

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
} 

بررسی سایز فایل آپلود شده

در فرم های پی اچ پی حتما قبل از آپلود و ذخیره فایل، حجم فایل دریافتی را بررسی نمایید. در این مثال حداکثر حجم فایل، 500 کیلوبایت در نظر گرفته شده است. که در صورت بیشتر بودن حجم فایل از این مقدار ارور مناسب نمایش داده شده و متغیر uploadOk مقدار 0 را می گیرد.

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
} 

منبع

دیدگاهتان را بنویسید