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

การอัปโหลดไฟล์ใน 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 ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

การใช้งาน คำสั่ง file_exists() อย่างเข้าใจ

นี่อาจจะไม่เรื่องใหม่อะไรสำหรับ Professional ทั้งหลาย แต่ว่าสำหรับผมที่เข้าใจ และใช้งานอย่างผิดๆ มาตลอด จนบางทีก็เข้าใจว่า เราเขียนผิด หรือ คำสั่งมันใช้งานไม่ได้ วันนี้จะขอมาพูดถึงเรื่องของคำสั่ง PHP ที่ชื่อ file_exists เป็นคำสั่งที่ใช้สำหรับตรวจสอบไฟล์ว่ามีอยู่จริงหรือไม่? ตัวอย่างการใช้งานแบบผิดๆ ที่ผมใช้ก็คือ file_exists('/images/news/helloworld.jpg'); ผลลัพธ์ที่ได้คือ FALSE ถึงแม้ว้าจะมีไฟล์นั้นอยู่จริงก็ตาม ซึ่งในความเป็นจริงแล้ว การใช้งานที่ถูกต้องคือ file_exists($_SERVER['DOCUMENT_ROOT'] . '/images/news/helloworld.jpg'); จากตัวอย่างที่ถูกต้อง ทำให้เข้าใจแบบง่ายๆ ว่าคำสั่ง file_exists นั้นใช้สำหรับเช็ค path ในโฟลเดอร์จริงๆ เท่านั้น ไม่สามารถเช็คจาก URL ได้ อันนี้เป็นเรื่องง่ายๆ ที่ผมเข้าใจผิดมาอยู่นานเลยทีเดียวเลยต้องขอลงบันทึกเตือนตัวเองไว้อีกที :3

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

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