Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การทำงานกับ Files ใน PHP

บทความนี้กล่าวถึงวิธีการจัดการไฟล์ใน PHP ซึ่งครอบคลุมฟังก์ชันพื้นฐานอย่าง `fopen()`, `fread()`, `fwrite()`, และ `fclose()` รวมถึงการจัดการสิทธิ์การเข้าถึงไฟล์ (...

การทำงานกับ Files ใน PHP

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

ฟังก์ชันพื้นฐานสำหรับการจัดการไฟล์

PHP มีชุดฟังก์ชันที่ช่วยให้เราสามารถทำงานกับไฟล์ได้อย่างง่ายดาย มาดูฟังก์ชันหลักๆ ที่เราจะใช้กัน:

  • fopen(): เปิดไฟล์
  • fread(): อ่านข้อมูลจากไฟล์
  • fwrite(): เขียนข้อมูลลงในไฟล์
  • fclose(): ปิดไฟล์

fopen() - การเปิดไฟล์

ฟังก์ชัน fopen() ใช้สำหรับเปิดไฟล์ โดยรับพารามิเตอร์ 2 ตัว:

  • ชื่อไฟล์ (Path)
  • โหมดการเปิดไฟล์ (Mode)

รูปแบบการใช้งาน:

$file = fopen("myfile.txt", "r");

โหมดการเปิดไฟล์ (Mode) ที่พบบ่อย:

  • "r": อ่านอย่างเดียว (Read-only). ตัวชี้เริ่มต้นที่จุดเริ่มต้นของไฟล์
  • "w": เขียนอย่างเดียว (Write-only). เปิดและล้างข้อมูลในไฟล์ ถ้าไฟล์ไม่มีอยู่ จะสร้างไฟล์ใหม่
  • "a": เขียนต่อท้าย (Append). เปิดและเขียนข้อมูลต่อท้ายไฟล์ ถ้าไฟล์ไม่มีอยู่ จะสร้างไฟล์ใหม่
  • "x": สร้างและเขียน (Exclusive create). สร้างไฟล์ใหม่สำหรับเขียนเท่านั้น หากไฟล์มีอยู่แล้ว จะคืนค่า FALSE และสร้างข้อผิดพลาด
  • "r+": อ่านและเขียน (Read/Write). ตัวชี้เริ่มต้นที่จุดเริ่มต้นของไฟล์
  • "w+": อ่านและเขียน (Read/Write). เปิดและล้างข้อมูลในไฟล์ ถ้าไฟล์ไม่มีอยู่ จะสร้างไฟล์ใหม่
  • "a+": อ่านและเขียนต่อท้าย (Read/Write Append). เปิดและเขียนข้อมูลต่อท้ายไฟล์ ถ้าไฟล์ไม่มีอยู่ จะสร้างไฟล์ใหม่
  • "x+": สร้างและอ่าน/เขียน (Exclusive create and read/write). สร้างไฟล์ใหม่สำหรับอ่านและเขียนเท่านั้น หากไฟล์มีอยู่แล้ว จะคืนค่า FALSE และสร้างข้อผิดพลาด

ตัวอย่าง: การเปิดไฟล์เพื่ออ่าน

$file = fopen("data.txt", "r");

if ($file) {
    echo "เปิดไฟล์สำเร็จ!";
} else {
    echo "ไม่สามารถเปิดไฟล์ได้!";
}

fread() - การอ่านข้อมูลจากไฟล์

ฟังก์ชัน fread() ใช้สำหรับอ่านข้อมูลจากไฟล์ โดยรับพารามิเตอร์ 2 ตัว:

  • ตัวแปร File handle (ที่ได้จาก fopen())
  • จำนวนไบต์ที่ต้องการอ่าน

รูปแบบการใช้งาน:

$file = fopen("myfile.txt", "r");
$data = fread($file, filesize("myfile.txt")); // อ่านทั้งหมด
fclose($file);
echo $data;

ข้อควรระวัง: ฟังก์ชัน filesize() ใช้สำหรับหาขนาดของไฟล์เป็นไบต์

fwrite() - การเขียนข้อมูลลงในไฟล์

ฟังก์ชัน fwrite() ใช้สำหรับเขียนข้อมูลลงในไฟล์ โดยรับพารามิเตอร์ 2 ตัว:

  • ตัวแปร File handle (ที่ได้จาก fopen())
  • ข้อมูลที่ต้องการเขียน

รูปแบบการใช้งาน:

$file = fopen("myfile.txt", "w"); // เปิดไฟล์ในโหมดเขียน (จะลบข้อมูลเก่า)
$txt = "Hello World!\n";
fwrite($file, $txt);
fclose($file);
echo "เขียนไฟล์สำเร็จ!";

fclose() - การปิดไฟล์

ฟังก์ชัน fclose() ใช้สำหรับปิดไฟล์ที่เปิดไว้ โดยรับพารามิเตอร์ 1 ตัว:

  • ตัวแปร File handle (ที่ได้จาก fopen())

รูปแบบการใช้งาน:

$file = fopen("myfile.txt", "r");
// ... ทำงานกับไฟล์ ...
fclose($file);

สำคัญ: ควรปิดไฟล์ทุกครั้งหลังจากใช้งานเสร็จ เพื่อปล่อยทรัพยากรและป้องกันปัญหาอื่นๆ

File Permissions

File permissions (สิทธิ์การเข้าถึงไฟล์) เป็นสิ่งสำคัญที่ต้องพิจารณาเมื่อทำงานกับไฟล์บนระบบปฏิบัติการต่างๆ โดยเฉพาะ Linux/Unix-based systems Permissions กำหนดว่าใครสามารถอ่าน, เขียน, หรือ execute ไฟล์ได้บ้าง

Permissions มักจะแสดงในรูปแบบของตัวอักษร 10 ตัว เช่น -rwxr-xr-- ซึ่งมีความหมายดังนี้:

  • ตัวแรก: ประเภทของไฟล์ (- = ไฟล์ปกติ, d = ไดเรกทอรี)
  • 3 ตัวถัดไป: Permissions สำหรับเจ้าของไฟล์ (User)
  • 3 ตัวถัดไป: Permissions สำหรับกลุ่ม (Group)
  • 3 ตัวสุดท้าย: Permissions สำหรับคนอื่นๆ (Others)

แต่ละชุด 3 ตัว ประกอบด้วย:

  • r: Read (อ่าน)
  • w: Write (เขียน)
  • x: Execute (รัน)
  • -: ไม่มีสิทธิ์

ตัวอย่าง: -rwxr-xr-- หมายถึง:

  • เป็นไฟล์ปกติ
  • เจ้าของไฟล์: อ่าน, เขียน, และรันได้
  • กลุ่ม: อ่านและรันได้
  • คนอื่นๆ: อ่านได้อย่างเดียว

การเปลี่ยน File Permissions ใน PHP:

เราสามารถใช้ฟังก์ชัน chmod() เพื่อเปลี่ยน permissions ของไฟล์ได้

รูปแบบการใช้งาน:

chmod("myfile.txt", 0755); // เปลี่ยนเป็น rwxr-xr-x

Note: ค่า 0755 เป็นเลขฐานแปด (Octal) ที่แทน permissions ในรูปแบบตัวเลข

ข้อควรระวัง: การเปลี่ยน permissions อาจต้องใช้สิทธิ์ที่สูงกว่า (เช่น sudo) และควรทำด้วยความระมัดระวัง เพราะอาจส่งผลต่อความปลอดภัยของระบบ

File Uploading

การอัปโหลดไฟล์เป็นฟังก์ชันที่สำคัญสำหรับเว็บแอปพลิเคชันหลายประเภท มาดูวิธีการอัปโหลดไฟล์ด้วย PHP:

ขั้นตอน:

  1. สร้างฟอร์ม HTML สำหรับการอัปโหลดไฟล์
  2. เขียน PHP script เพื่อรับและจัดการไฟล์ที่อัปโหลด

1. ฟอร์ม HTML

<form action="upload.php" method="post" enctype="multipart/form-data">
  <label for="fileToUpload">Select file to upload:</label>
  <input type="file" name="fileToUpload" id="fileToUpload"><br><br>
  <input type="submit" value="Upload File" name="submit">
</form>

สำคัญ:

  • enctype="multipart/form-data": ต้องระบุเมื่อมีไฟล์อัปโหลด
  • <input type="file" name="fileToUpload" id="fileToUpload">: สร้างช่องสำหรับเลือกไฟล์

2. PHP Script (upload.php)

<?php
$target_dir = "uploads/"; // ไดเรกทอรีที่จะเก็บไฟล์
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // ชื่อไฟล์ปลายทาง
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// ตรวจสอบว่าเป็นไฟล์ภาพจริงหรือไม่
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;
  }
}

// ตรวจสอบว่าไฟล์มีอยู่แล้วหรือไม่
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// ตรวจสอบขนาดไฟล์
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// อนุญาตเฉพาะบางประเภทไฟล์
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}

// ตรวจสอบว่า $uploadOk ถูกตั้งค่าเป็น 0 โดยข้อผิดพลาดใดๆ หรือไม่
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// ถ้าทุกอย่างโอเค พยายามอัปโหลดไฟล์
} 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.";
  }
}
?>

คำอธิบาย:

  • $_FILES: ตัวแปร Superglobal ที่เก็บข้อมูลเกี่ยวกับไฟล์ที่อัปโหลด
  • $_FILES["fileToUpload"]["name"]: ชื่อไฟล์เดิม
  • $_FILES["fileToUpload"]["tmp_name"]: ตำแหน่งชั่วคราวของไฟล์บนเซิร์ฟเวอร์
  • move_uploaded_file(): ฟังก์ชันสำหรับย้ายไฟล์จากตำแหน่งชั่วคราวไปยังตำแหน่งปลายทาง

ข้อควรระวัง:

  • ตรวจสอบประเภทไฟล์, ขนาดไฟล์, และชื่อไฟล์ เพื่อป้องกันการอัปโหลดไฟล์ที่เป็นอันตราย
  • ใช้ฟังก์ชัน htmlspecialchars() เพื่อป้องกัน XSS attacks เมื่อแสดงชื่อไฟล์

สรุป

ในบทเรียนนี้ เราได้เรียนรู้พื้นฐานของการจัดการไฟล์ใน PHP ตั้งแต่การเปิด, อ่าน, เขียน, และปิดไฟล์, การจัดการ File Permissions, และการอัปโหลดไฟล์ ทักษะเหล่านี้เป็นสิ่งจำเป็นสำหรับการสร้างเว็บแอปพลิเคชันที่สามารถจัดการข้อมูลได้อย่างมีประสิทธิภาพและปลอดภัย ในบทเรียนถัดไป เราจะมาเรียนรู้เกี่ยวกับการใช้ Regular Expressions ใน PHP

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service