ข้ามไปที่เนื้อหาหลัก

การอัปโหลดไฟล์ใน PHP: ขั้นตอนและตัวอย่างโค้ด

การอัปโหลดไฟล์เป็นหนึ่งในฟีเจอร์ที่สำคัญในการพัฒนาเว็บแอปพลิเคชัน ในบทความนี้เราจะสอนคุณวิธีทำการอัปโหลดไฟล์ใน PHP ด้วยขั้นตอนที่ง่ายต่อการติดตาม ตัวอย่างนี้จะชี้แนะเกี่ยวกับการใช้ฟอร์ม HTML และโค้ด PHP เพื่อรับและจัดการกับไฟล์ที่ผู้ใช้ส่งมา

ขั้นตอนที่ 1: สร้างฟอร์ม HTML

<!DOCTYPE html>

<html lang="th">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>แบบฟอร์มอัปโหลดไฟล์</title>

</head>

<body>

  <h2>แบบฟอร์มอัปโหลดไฟล์</h2>

  <form action="upload.php" method="post" enctype="multipart/form-data">

    <label for="file">เลือกไฟล์:</label>

    <input type="file" name="file" id="file" required>

    <br>

    <button type="submit">อัปโหลด</button>

  </form>

</body>

</html>

ขั้นตอนที่ 2: สร้างไฟล์ PHP สำหรับการอัปโหลด

php
Copy code
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $target_dir = "uploads/";
  $target_file = $target_dir . basename($_FILES["file"]["name"]);
  $uploadOk = 1;
  $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

  // ตรวจสอบว่าไฟล์เป็นรูปภาพหรือไม่
  if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["file"]["tmp_name"]);
    if($check !== false) {
      echo "ไฟล์เป็นรูปภาพ - " . $check["mime"] . ".";
      $uploadOk = 1;
    } else {
      echo "ไฟล์ไม่ใช่รูปภาพ.";
      $uploadOk = 0;
    }
  }

  // ตรวจสอบขนาดไฟล์
  if ($_FILES["file"]["size"] > 500000) {
    echo "ขออภัย, ไฟล์มีขนาดใหญ่เกินไป.";
    $uploadOk = 0;
  }

  // อนุญาตเฉพาะประเภทไฟล์ที่กำหนด
  if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
  && $imageFileType != "gif" ) {
    echo "ขออภัย, ไฟล์ที่อนุญาตให้อัปโหลดคือ JPG, JPEG, PNG และ GIF เท่านั้น.";
    $uploadOk = 0;
  }

  // ตรวจสอบค่า $uploadOk ก่อนทำการอัปโหลด
  if ($uploadOk == 0) {
    echo "ขออภัย, ไฟล์ของคุณไม่ได้ถูกอัปโหลด.";
  } else {
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
      echo "ไฟล์ ". htmlspecialchars( basename( $_FILES["file"]["name"])). " ได้ถูกอัปโหลดเรียบร้อยแล้ว.";
    } else {
      echo "ขออภัย, มีข้อผิดพลาดในการอัปโหลดไฟล์ของคุณ.";
    }
  }
}
?>
ในตัวอย่างนี้, เราใช้ฟังก์ชัน move_uploaded_file เพื่อย้ายไฟล์ที่อัปโหลดไปยังไดเรกทอรีที่กำหนด. นอกจากนี้, เราทำการตรวจสอบประเภทของไฟล์และขนาดเพื่อให้มั่นใจว่าไฟล์ที่ถูกอัปโหลดเป็นไปตามเงื่อนไขที่กำหนด.

อย่าลืมปรับแต่งโค้ดนี้ตามความต้องการของโปรเจกต์และแก้ไขที่อยู่ของไดเรกทอรีที่เก็บไฟล์ตามต้องการ.

นี้คือเพียงเบื้องต้นของวิธีการอัปโหลดไฟล์ใน PHP พร้อมกับตัวอย่างโค้ดที่สามารถนำไปใช้งานได้.

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

การเพิ่ม Font ภาษาไทยอื่นๆ เข้าไปใช้งานใน MPDF

เนื่องมาจากผมได้มีโอกาสจับงานที่ต้องแปลงหน้าเว็บให้เป็น PDF ลองๆ หาข้อมูลก็ไปเจอเจ้าตัวนี้ MPDF  ซึ่งจริงๆ แล้วก็มีให้ใช้งานอีกหลายๆ ตัว สาเหตุที่เลือกใช้งานตัวนี้เพราะมัน ค่อนข้างจะติดตั้ง และใช้งานง่าย และยังสามารถอ้างอิง CSS เข้ามาช่วยจัดหน้าตาใน PDF ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

การเขียน Force download ด้วย PHP

การทำ Force download ด้วย PHP นั้น ไม่ไช่เรื่องใหม่อะไร มีการเขียนโค้ดด้วยลักษณะนี้อยู่บ่อยๆ แต่ผมต้องนำมาแปะเป็นทริคเล็กน้อยกันตัวเองลืมครับ ประโยชน์ของมันคือในกรณีที่เราไม่สามารถเข้าไปจัดการ Apache config ได้เราสามารถใช้วิธีนี้แทนได้

มาเข้าใจ และใช้ Datatable ดึงข้อมูลแบบ Server-side ด้วย PHP, MySQL กันเถอะ

มีช่วงหนึงผมเคยนำ datatable มาพัฒนาในงานแต่เกิดปัญหาเนื่องจากมีข้อมูลขนาดใหญ่ ทำให้เกิดการโหลดในครั้งแรกที่โหลดหน้าเพจนั้นๆ เนื่องจากผมใช้ Ajax ในการโหลดข้อมูลทั้งหมดมาในครั้งเดียวด้วยจำนวนข้อมูล 1000 ขึ้น ซึ่งตอนนั้นผมคิดว่าการทำ preload น่าจะช่วยได้ แต่ว่าถ้า user เกิดเผลอไปกด refesh หรือแก้ไขข้อมูลเวลากลับมาที่หน้าข้อมูลก็ต้องโหลดใหม่อีก ทำให้ผมเลิกใช้ datatable ไปเลย เพราะคิดว่ามันคงไม่เหมาะ แต่ในความจริงแล้ว datatable ก็ได้มีสิ่งที่มาแก้ในจุดนั้นได้ ซึ่งเรียกว่า server-side โดยการที่อนุญาตให้เรา query ข้อมูลออกมาก่อนแล้วส่งมาให้ datatable อ่านข้อมูลในจำนวนที่น้อยลง หลักการก็เหมือนๆ กับบทความการทำสร้าง XML จากข้อมูลขนาดใหญ่นั่นแหละครับ แต่มีเงื่อนไขเพียงแต่ว่า ต้อง Filter และส่งข้อมูลออกมาในรูปแบบที่ตรงตามหลักของ datatable เท่านั้น ( บางครั้งเวลาเข้าไปอ่าน Document หรือดู Example จะงงๆ ว่าอะไรเยอะแยะ ) โดยวันนี้จะมาแนะนำการใช้งานแบบง่ายๆ กันเลย :D