Skip to main content

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

System guide Content reviewed

การจัดการไฟล์: file_get_contents, file_put_contents

บทความนี้แนะนำฟังก์ชัน `file_get_contents()` และ `file_put_contents()` ใน PHP ซึ่งเป็นเครื่องมือที่ง่ายกว่า `fopen()`, `fread()`, `fwrite()` และ `fclose()` สำหร...

การจัดการไฟล์: file_get_contents, file_put_contents

ในบทเรียนก่อนหน้า เราได้เรียนรู้วิธีการจัดการไฟล์ด้วยฟังก์ชันพื้นฐานอย่าง fopen(), fread(), fwrite() และ fclose() ซึ่งเป็นวิธีการที่ให้ความยืดหยุ่นในการควบคุมการอ่านและเขียนไฟล์อย่างละเอียด ในบทนี้ เราจะมาดูฟังก์ชันที่ใช้งานง่ายกว่าและเหมาะสำหรับงานที่ต้องการอ่านหรือเขียนไฟล์ทั้งหมดในครั้งเดียว นั่นคือ file_get_contents() และ file_put_contents()

การอ่านไฟล์ทั้งหมดด้วย file_get_contents()

ฟังก์ชัน file_get_contents() ทำหน้าที่อ่านเนื้อหาทั้งหมดของไฟล์และส่งกลับเป็น string ซึ่งทำให้ง่ายต่อการนำข้อมูลในไฟล์ไปใช้งานต่อ ตัวอย่างเช่น:

<?php

$filename = 'my_file.txt';

// ตรวจสอบว่าไฟล์มีอยู่จริงหรือไม่
if (file_exists($filename)) {
  $content = file_get_contents($filename);

  if ($content !== false) {
    echo "<p>เนื้อหาของไฟล์: <pre>" . htmlspecialchars($content) . "</pre></p>";
  } else {
    echo "<p>ไม่สามารถอ่านไฟล์ได้</p>";
  }
} else {
  echo "<p>ไฟล์ $filename ไม่พบ</p>";
}

?>

ในตัวอย่างนี้:

  • เรากำหนดชื่อไฟล์ที่จะอ่านในตัวแปร $filename
  • เราใช้ file_exists() เพื่อตรวจสอบว่าไฟล์มีอยู่จริงก่อนที่จะพยายามอ่าน
  • เราเรียกใช้ file_get_contents() เพื่ออ่านเนื้อหาทั้งหมดของไฟล์
  • เราตรวจสอบว่า file_get_contents() คืนค่า false หรือไม่ ซึ่งบ่งบอกว่าเกิดข้อผิดพลาดในการอ่านไฟล์
  • หากอ่านไฟล์สำเร็จ เราจะแสดงเนื้อหาของไฟล์ออกมา โดยใช้ htmlspecialchars() เพื่อป้องกันการแสดงผล HTML ที่ไม่พึงประสงค์ (เช่น script injection)

ข้อควรระวัง: file_get_contents() จะอ่านไฟล์ทั้งหมดลงในหน่วยความจำ ดังนั้นจึงไม่เหมาะสำหรับไฟล์ขนาดใหญ่มาก เพราะอาจทำให้หน่วยความจำของเซิร์ฟเวอร์หมดได้

การเขียนข้อมูลลงไฟล์ด้วย file_put_contents()

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

<?php

$filename = 'my_file.txt';
$data = "Hello, world!\nThis is a new line.";

// เขียนข้อมูลลงในไฟล์ (เขียนทับเนื้อหาเดิม)
$result = file_put_contents($filename, $data);

if ($result !== false) {
  echo "<p>เขียนข้อมูลลงในไฟล์สำเร็จ (เขียนทับ). เขียนไป " . $result . " ไบต์</p>";
} else {
  echo "<p>ไม่สามารถเขียนข้อมูลลงในไฟล์ได้</p>";
}


$more_data = "\nThis is another line appended to the file.";

// เขียนข้อมูลต่อท้ายไฟล์
$result = file_put_contents($filename, $more_data, FILE_APPEND);

if ($result !== false) {
  echo "<p>เขียนข้อมูลต่อท้ายไฟล์สำเร็จ. เขียนไป " . $result . " ไบต์</p>";
} else {
  echo "<p>ไม่สามารถเขียนข้อมูลต่อท้ายไฟล์ได้</p>";
}

?>

ในตัวอย่างนี้:

  • เรากำหนดชื่อไฟล์ที่จะเขียนในตัวแปร $filename และข้อมูลที่จะเขียนในตัวแปร $data
  • เราเรียกใช้ file_put_contents() เพื่อเขียนข้อมูลลงในไฟล์ โดยค่าเริ่มต้น จะเขียนทับเนื้อหาเดิม
  • เราตรวจสอบว่า file_put_contents() คืนค่า false หรือไม่ ซึ่งบ่งบอกว่าเกิดข้อผิดพลาดในการเขียนไฟล์
  • หากเขียนไฟล์สำเร็จ เราจะแสดงข้อความบอกว่าเขียนไฟล์สำเร็จ และจำนวนไบต์ที่เขียนลงไป
  • เราเขียนข้อมูลต่อท้ายไฟล์โดยใช้ flag FILE_APPEND เป็น parameter ที่สามของ file_put_contents()

ข้อควรระวัง: เช่นเดียวกับ file_get_contents(), file_put_contents() ก็ไม่เหมาะสำหรับไฟล์ขนาดใหญ่มาก เพราะข้อมูลทั้งหมดจะถูกเก็บไว้ในหน่วยความจำก่อนที่จะเขียนลงไฟล์

ข้อดีและข้อเสียของการใช้ file_get_contents() และ file_put_contents()

ข้อดี:

  • ใช้งานง่าย: ฟังก์ชันเหล่านี้ใช้งานง่ายกว่า fopen(), fread(), fwrite() และ fclose() มาก
  • Code สั้น: สามารถอ่านหรือเขียนไฟล์ทั้งหมดได้ด้วยโค้ดเพียงไม่กี่บรรทัด
  • เหมาะสำหรับงานง่ายๆ: เหมาะสำหรับงานที่ต้องการอ่านหรือเขียนไฟล์ทั้งหมดในครั้งเดียว เช่น การอ่านไฟล์ config, การเขียน log ไฟล์ขนาดเล็ก

ข้อเสีย:

  • ไม่เหมาะสำหรับไฟล์ขนาดใหญ่: อ่านหรือเขียนไฟล์ทั้งหมดลงในหน่วยความจำ ซึ่งอาจทำให้หน่วยความจำหมดได้หากไฟล์มีขนาดใหญ่มาก
  • ควบคุมการทำงานได้น้อย: ไม่สามารถควบคุมการอ่านหรือเขียนไฟล์ได้ละเอียดเท่ากับ fopen(), fread(), fwrite() และ fclose()
  • ไม่มี error handling ที่ละเอียด: การจัดการ error ทำได้เพียงตรวจสอบว่าฟังก์ชันคืนค่า false หรือไม่ ซึ่งไม่เพียงพอสำหรับการจัดการ error ที่ซับซ้อน

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

กรณีใช้งานจริง:

  • การอ่านไฟล์ config: อ่านไฟล์ config ที่มีข้อมูลการตั้งค่าของโปรแกรม
  • การเขียน log ไฟล์ขนาดเล็ก: เขียนข้อความ log ลงในไฟล์
  • การอ่านไฟล์ HTML เพื่อแสดงผล: อ่านไฟล์ HTML และแสดงผลบนหน้าเว็บ
  • การ cache ข้อมูล: บันทึกผลลัพธ์ของการคำนวณลงในไฟล์เพื่อนำกลับมาใช้ใหม่ในภายหลัง (cache)

ข้อผิดพลาดที่พบบ่อย:

  • Permission denied: PHP ไม่มีสิทธิ์ในการอ่านหรือเขียนไฟล์
  • File not found: ไฟล์ที่ต้องการอ่านหรือเขียนไม่มีอยู่จริง
  • Memory exhausted: หน่วยความจำหมดเนื่องจากไฟล์มีขนาดใหญ่เกินไป
  • Disk full: พื้นที่ดิสก์เต็ม ทำให้ไม่สามารถเขียนไฟล์ได้
  • Encoding issue: ปัญหาเกี่ยวกับ encoding ของไฟล์ ทำให้ข้อมูลที่อ่านหรือเขียนไม่ถูกต้อง (เช่น ภาษาไทยแสดงผลผิดพลาด)

สรุป

file_get_contents() และ file_put_contents() เป็นฟังก์ชันที่มีประโยชน์สำหรับการจัดการไฟล์ใน PHP โดยเฉพาะอย่างยิ่งสำหรับงานที่ต้องการอ่านหรือเขียนไฟล์ทั้งหมดในครั้งเดียว อย่างไรก็ตาม ควรระมัดระวังในการใช้งานกับไฟล์ขนาดใหญ่ และควรตรวจสอบ permission และการมีอยู่ของไฟล์ก่อนที่จะใช้งานเสมอ ในบทเรียนถัดไป เราจะพูดถึงฟังก์ชันอื่นๆ ที่เกี่ยวข้องกับการจัดการไฟล์ เช่น is_file(), is_dir() และ file_exists()

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