อ่าน PHP Error Log บน DirectAdmin

เมื่อเว็บไซต์แสดง "500 Internal Server Error", "White Screen of Death" หรือทำงานผิดปกติ PHP Error Log คือจุดแรกที่ต้องตรวจสอบ ไฟล์ Log นี้บันทึกข้อผิดพลาดทุกอย่างที่เกิดขึ้นในโค้ด PHP ช่วยให้คุณระบุสาเหตุได้แม่นยำโดยไม่ต้องเดา บทความนี้จะสอนวิธีเปิดใช้งานและอ่าน PHP Error Log บน DirectAdmin Hosting

PHP Error Log คืออะไร

PHP Error Log คือไฟล์ข้อความที่ PHP เขียนข้อผิดพลาดลงไปทุกครั้งที่โค้ดทำงานผิดปกติ ข้อผิดพลาดแบ่งเป็นหลายระดับ ได้แก่:

เปิดใช้งาน PHP Error Logging บน DirectAdmin

วิธีที่ 1 — แก้ไข php.ini ผ่าน DirectAdmin

  1. เข้า DirectAdmin → Advanced FeaturesPHP Configuration
  2. ค้นหาค่าต่อไปนี้และตั้งให้ตรงตามนี้:
error_reporting = E_ALL
log_errors = On
error_log = /home/username/public_html/php_errors.log
display_errors = Off

ควรตั้ง display_errors = Off บน Production Server เสมอ เพื่อป้องกันไม่ให้ Error แสดงบนหน้าเว็บต่อผู้ใช้งาน

วิธีที่ 2 — ใช้ไฟล์ .htaccess

ถ้าไม่มีสิทธิ์แก้ php.ini โดยตรง สามารถใช้ .htaccess ได้:

php_flag log_errors on
php_value error_log /home/username/public_html/php_errors.log
php_flag display_errors off
php_value error_reporting 32767

วิธีที่ 3 — ใส่ใน wp-config.php (WordPress)

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

WordPress จะบันทึก Error ไปยัง wp-content/debug.log โดยอัตโนมัติ

ข้อควรระวัง: อย่าเปิด display_errors = On บนเว็บ Production เด็ดขาด เพราะ Error Messages อาจเปิดเผย Path ของไฟล์, Database credentials หรือข้อมูลสำคัญอื่นๆ ให้ผู้ใช้ทั่วไปมองเห็นได้

วิธีอ่าน PHP Error Log

หลังจากเปิดใช้งาน Error Logging แล้ว สามารถอ่านไฟล์ได้หลายวิธี:

ผ่าน DirectAdmin File Manager

  1. เข้า File Manager
  2. หาไฟล์ php_errors.log หรือ debug.log
  3. คลิกขวาเลือก View หรือ Edit

ผ่าน SSH / Shell

# ดู 50 บรรทัดล่าสุด
tail -n 50 /home/username/public_html/php_errors.log

# ติดตาม Log แบบ Real-time
tail -f /home/username/public_html/php_errors.log

# ค้นหา Fatal Error
grep "Fatal error" /home/username/public_html/php_errors.log

วิธีอ่านและตีความ Error Messages

ตัวอย่าง Error Message ที่พบบ่อย:

[16-May-2026 10:23:45 UTC] PHP Fatal error: Uncaught Error: Call to undefined function get_header() in /home/user/public_html/wp-content/themes/mytheme/index.php:5

Error ที่พบบ่อยและวิธีแก้

การตั้งค่า php.ini ที่สำคัญสำหรับ Debug

นอกจาก Error Logging แล้ว ยังมีค่าใน php.ini อีกหลายตัวที่ช่วยให้ Debug ง่ายขึ้นและป้องกันปัญหาที่พบบ่อย ตารางด้านล่างแสดงค่าที่แนะนำสำหรับสภาพแวดล้อม Development และ Production ซึ่งควรตั้งให้แตกต่างกัน

ค่า php.ini Development Production ผลกระทบ
display_errors On Off แสดง/ซ่อน Error บนหน้าเว็บ
log_errors On On บันทึก Error ลงไฟล์ Log
error_reporting E_ALL E_ALL & ~E_NOTICE ระดับ Error ที่บันทึก
memory_limit 256M 128M–256M RAM สูงสุดต่อ Script
max_execution_time 120 60 เวลาสูงสุดรัน Script (วินาที)

บน DirectAdmin ไปที่ Advanced Features → PHP Configuration เพื่อแก้ไขค่าเหล่านี้โดยไม่ต้องเข้าถึงเซิร์ฟเวอร์โดยตรง

Debug WordPress Error ด้วย Query Monitor Plugin

สำหรับเว็บ WordPress นอกจาก WP_DEBUG_LOG แล้ว Plugin ชื่อ Query Monitor เป็นเครื่องมือ Debug ที่ครอบคลุมที่สุดโดยไม่ต้องอ่าน Log ด้วยตาตลอดเวลา มีฟีเจอร์สำคัญดังนี้:

ติดตั้งจาก WordPress Plugin Directory ค้นหา "Query Monitor" และ Activate ได้เลย แถบ Admin Bar ด้านบนจะมีข้อมูลสรุปแบบ Real-time ในทุกหน้า ควรปิดการใช้งานก่อน Push ขึ้น Production เพราะข้อมูล Debug ไม่ควรแสดงต่อผู้ใช้จริง

ป้องกัน PHP Error Log รั่วสู่สาธารณะ

ไฟล์ Log ที่เก็บอยู่ใน public_html มีความเสี่ยงที่บุคคลภายนอกจะเข้าถึงได้โดยตรงผ่าน Browser หากไม่มีการป้องกัน Log อาจเปิดเผย Path ไฟล์ภายใน ชื่อฐานข้อมูล หรือข้อมูลสำคัญอื่น มีวิธีป้องกันหลายทาง:

วิธีที่ 1 — ย้าย Log ออกนอก public_html

ตั้งค่า error_log ให้ชี้ไปนอก Web Root เช่น:

error_log = /home/username/logs/php_errors.log

ไฟล์ที่อยู่นอก public_html จะไม่สามารถเข้าถึงผ่าน Browser ได้เลย นี่คือวิธีที่ปลอดภัยที่สุด

วิธีที่ 2 — Block ด้วย .htaccess

ถ้าจำเป็นต้องเก็บ Log ไว้ใน public_html ให้เพิ่มบรรทัดนี้ใน .htaccess:

# ป้องกันการเข้าถึงไฟล์ Log ผ่าน Browser
<FilesMatch "\.(log|txt)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

วิธีที่ 3 — ตั้งชื่อไฟล์ที่เดาไม่ได้

เปลี่ยนชื่อ Log File จาก php_errors.log เป็นชื่อที่ซับซ้อนขึ้น เช่น err_a8f3b2c.log เพื่อลดโอกาสที่ Bot จะค้นพบ แต่ควรทำควบคู่กับวิธีอื่นด้วย ไม่ใช่พึ่งเพียงอย่างเดียว

สรุปแนวปฏิบัติที่ดี: ย้าย Log ออกนอก public_html เป็นวิธีที่ดีที่สุด หากทำไม่ได้ให้ block ผ่าน .htaccess และหลีกเลี่ยงชื่อไฟล์ที่คาดเดาได้ง่าย ตรวจสอบ Permission ไฟล์ให้เป็น 600 เสมอ

การดูแลรักษา PHP Error Log ระยะยาว

PHP Error Log ที่ไม่ได้รับการดูแลอาจโตขึ้นจนใหญ่มากในเวลาไม่นาน โดยเฉพาะบนเว็บที่มีจำนวนผู้ใช้มากหรือมี Error ซ้ำๆ เกิดขึ้นทุกครั้งที่มีการเข้าถึงหน้านั้น ไฟล์ Log ขนาดหลาย GB อาจกินพื้นที่ Disk จนกระทบการทำงานของ Hosting ทั้งระบบ มีแนวทางจัดการดังนี้:

การดูแล Error Log ไม่ใช่แค่การอ่านเมื่อเว็บมีปัญหา แต่ควรเป็น Routine ปกติของการบำรุงรักษาเว็บไซต์ ทีมนักพัฒนาที่ดีจะมีนโยบาย "Zero Error Policy" คือตั้งเป้าให้ Error Log ว่างเปล่าอยู่เสมอโดยแก้ทุก Notice และ Warning ให้หมดก่อนปล่อยโค้ดขึ้น Production สำหรับ Hosting ของ AsiaGB สามารถตรวจสอบพื้นที่ Disk ที่ใช้งานได้ผ่าน DirectAdmin ที่เมนู System Info & Files เพื่อให้แน่ใจว่า Log ไม่ได้กินพื้นที่เกินกำหนด

เปรียบเทียบเครื่องมือ Debug PHP บน Hosting

มีหลายวิธีในการ Debug PHP บน Shared Hosting ไม่ใช่ทุกเครื่องมือเหมาะกับทุกสถานการณ์ ตารางด้านล่างช่วยให้เลือกได้ตรงกับ Workflow ของคุณ

เครื่องมือ เหมาะกับ ข้อดี ข้อจำกัด
PHP Error Log PHP ทุกแบบ ไม่ต้องติดตั้งเพิ่ม บันทึก Error ทั้งหมด อ่านต้องเปิดไฟล์เอง
WP_DEBUG_LOG WordPress ตั้งค่าง่าย ไม่ต้องแก้ php.ini เฉพาะ WordPress เท่านั้น
Query Monitor WordPress Real-time ใน Browser ดู Query + Hook + Error ต้องปิดบน Production
var_dump() / error_log() PHP ทุกแบบ Debug ตำแหน่งเฉพาะเจาะจง ต้องลบออกก่อน Deploy จริง

Hosting PHP พร้อม Debug Environment

AsiaGB Hosting รองรับ PHP 7.4 / 8.2 / 8.3 พร้อม php.ini ที่ปรับได้เอง DirectAdmin Control Panel และ SSD เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจ Hosting