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

از ویکی کد
پرش به ناوبری پرش به جستجو

با PHP، بارگذاری فایل روی سرور آسان است.[۱]

اما، در بعضی از مواقع بارگذاری فایل ممکن است خطرناک باشد، بنابراین زمانی که اجازه بارگذاری فایل می‌دهید باید بسیار دقت کنید.

تنظیمات فایل "php.ini"

ابتدا، مطمئن شوید که تنظیمات PHP اجازه بارگذاری فایل را می‌دهد.

در فایل "php.ini" خود، عبارت file_uploads را جستجو کنید، و مقدار آن را روی On تنظیم کنید:

file_uploads = On

ساخت فرم HTML

در مرحله بعدی، یک فرم HTML ایجاد کنید که به کاربران اجازه انتخاب تصویری را که قصد بارگذاری آن را دارند را بدهد:

 1 <!DOCTYPE html>
 2 <html>
 3 <body>
 4 
 5 <form action="upload.php" method="post" enctype="multipart/form-data">
 6     Select image to upload:
 7     <input type="file" name="fileToUpload" id="fileToUpload">
 8     <input type="submit" value="Upload Image" name="submit">
 9 </form>
10 
11 </body>
12 </html>

برخی از قوانینی که می‌بایست در کد بالا رعایت شوند:

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

بدون رعایت موارد مورد نیاز فوق، بارگذاری فایل کار نخواهد کرد.

نکته ای که باید به آن توجه کنید این است که:

  • خاصیت type="file" تگ <input> فیلد ورودی را به صورت یک کنترل انتخاب فایل به همراه یک دکمه "browse" که در کنار کنترل ورودی قرار گرفته نشان می‌دهد

فرم بالا اطلاعات را به فایلی به نام "upload.php" ارسال می‌کند، که ما آن را در مراحل بعدی خواهیم ساخت.

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

فایل "uploads.php" شامل کد زیر برای بارگذاری یک فایل است:

 1 <?php
 2 $target_dir = "uploads/";
 3 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
 4 $uploadOk = 1;
 5 $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
 6 // Check if image file is a actual image or fake image
 7 if(isset($_POST["submit"])) {
 8     $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
 9     if($check !== false) {
10         echo "File is an image - " . $check["mime"] . ".";
11         $uploadOk = 1;
12     } else {
13         echo "File is not an image.";
14         $uploadOk = 0;
15     }
16 }
17 ?>

توضیح اسکریپت PHP بالا:

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


بررسی وجود داشتن فایل

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

ابتدا، ما بررسی می‌کنیم که آیا فایل از قبل در پوشه "uploads" وجود دارد یا خیر. در صورت وجود، یک پیغام خطا نمایش داده می‌شود، و متغیر $uploadOk با مقدار ۰ مقدار دهی می‌شود:

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

محدودسازی اندازه فایل

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

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

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

محدودسازی نوع فایل

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

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

کد کامل اسکریپت فایل Upload

کد کامل فایل "upload.php" به صورت زیر است:

 1 <?php
 2 $target_dir = "uploads/";
 3 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
 4 $uploadOk = 1;
 5 $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
 6 // Check if image file is a actual image or fake image
 7 if(isset($_POST["submit"])) {
 8     $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
 9     if($check !== false) {
10         echo "File is an image - " . $check["mime"] . ".";
11         $uploadOk = 1;
12     } else {
13         echo "File is not an image.";
14         $uploadOk = 0;
15     }
16 }
17 // Check if file already exists
18 if (file_exists($target_file)) {
19     echo "Sorry, file already exists.";
20     $uploadOk = 0;
21 }
22 // Check file size
23 if ($_FILES["fileToUpload"]["size"] > 500000) {
24     echo "Sorry, your file is too large.";
25     $uploadOk = 0;
26 }
27 // Allow certain file formats
28 if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
29 && $imageFileType != "gif" ) {
30     echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
31     $uploadOk = 0;
32 }
33 // Check if $uploadOk is set to 0 by an error
34 if ($uploadOk == 0) {
35     echo "Sorry, your file was not uploaded.";
36 // if everything is ok, try to upload file
37 } else {
38     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
39         echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
40     } else {
41         echo "Sorry, there was an error uploading your file.";
42     }
43 }
44 ?>

مرجع کامل فایل سیستم در PHP

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

منابع آموزشی