PHP การอัพโหลดไฟล์

ด้วย PHP คุณสามารถอัพโหลดไฟล์ไปยังเซิร์ฟเวอร์

สร้างแบบฟอร์มอัพโหลดไฟล์

การอนุญาตให้ผู้ใช้อัพโหลดไฟล์จากแบบฟอร์มมีประโยชน์มาก

โปรดดูแบบฟอร์ม HTML สำหรับอัพโหลดไฟล์ด้านล่างนี้:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</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> กำหนดว่าต้องการประมวลผลรายการเข้าข้อมูลในรูปแบบไฟล์ ตัวอย่างเช่น ขณะที่คุณรีวิวในเบราเซอร์ คุณจะเห็นปุ่มเลือกที่อยู่ข้างหลังตัวกรอง

หมายเหตุ:การอนุญาตให้ผู้ใช้ลงโหลดไฟล์เป็นการเสี่ยงความปลอดภัยอย่างมาก โปรดอนุญาตเพียงผู้ใช้ที่เชื่อถือได้เท่านั้นที่จะทำการอัพโหลดไฟล์

สร้างสคริปต์อัพโหลด

ไฟล์ "upload_file.php" มีโค้ดสำหรับอัพโหลดไฟล์:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_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 "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

ด้วยการใช้แบบฟอร์มตัวแปรสากล $_FILES ของ PHP คุณสามารถอัพโหลดไฟล์จากคอมพิวเตอร์ของผู้ใช้ส่งไปยังเซิร์ฟเวอร์ทางไกลได้

ตัวเลขค่าแรกคือชื่อ 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 kb:

<?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 "Error: " . $_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 "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }
?>

หมายเหตุ:สำหรับ 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 "Return Code: " . $_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";
  }
?>

สคริปต์ด้านบนตรวจสอบว่าแฟ้มนี้มีอยู่หรือไม่ ถ้าไม่มี จะคัดลอกแฟ้มไปยังโฟลเดอร์ที่กำหนด

หมายเหตุ:ตัวอย่างนี้ได้บันทึกแฟ้มไว้ในโฟลเดอร์ใหม่ที่มีชื่อว่า "upload"