ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG

แก้ปัญหา "There has been a critical error" ใน WordPress ด้วย WP_DEBUG

ข้อความ "There has been a critical error on this website." คือหน้าจอที่ WordPress แสดงเมื่อเกิด PHP Fatal Error ระหว่างโหลดหน้าเว็บ ตั้งแต่ WordPress 5.2 ระบบจะซ่อนรายละเอียดของ Error ไว้เพื่อไม่ให้ผู้เข้าชมเห็นข้อมูลภายใน แต่นั่นก็ทำให้ผู้ดูแลไม่รู้ว่าอะไรพัง สาเหตุที่พบบ่อยคือปลั๊กอินหรือธีมที่เพิ่งอัปเดต การเปลี่ยนเวอร์ชัน PHP หรือหน่วยความจำไม่พอ

บทความนี้อธิบายวิธีใช้ WP_DEBUG บันทึกรายละเอียดของ Error ลงไฟล์ วิธีอ่านข้อความ Error เพื่อหาไฟล์ต้นเหตุ และการใช้ Recovery Mode ที่ WordPress ส่งมาทางอีเมล

สิ่งที่ต้องเตรียม

  • สิทธิ์แก้ไขไฟล์ wp-config.php ผ่าน SSH, SFTP หรือ File Manager ของ Plesk/DirectAdmin
  • สำเนาของ wp-config.php ก่อนแก้ไข
  • เข้าถึงอีเมลของผู้ดูแลเว็บ (Administration Email Address ใน Settings > General) เพื่อรับลิงก์ Recovery Mode

ขั้นตอนที่ 1: ตรวจอีเมล Recovery Mode

เมื่อเกิด Fatal Error ที่ WordPress ระบุต้นเหตุได้ ระบบจะส่งอีเมลหัวเรื่อง "Your Site is Experiencing a Technical Issue" ไปยังอีเมลผู้ดูแล ในอีเมลจะบอกว่าปลั๊กอินหรือธีมใดทำให้เกิด Error และมีลิงก์สำหรับเข้า Recovery Mode

  1. คลิกลิงก์ในอีเมล แล้วเข้าสู่ระบบตามปกติ
  2. ใน Recovery Mode ปลั๊กอินที่มีปัญหาจะถูกหยุดชั่วคราวเฉพาะสำหรับเซสชันของคุณ ให้ไปที่หน้า Plugins แล้ว Deactivate ปลั๊กอินนั้นจริง
  3. คลิก Exit Recovery Mode ที่แถบด้านบน แล้วทดสอบเว็บ

ลิงก์ Recovery Mode มีอายุจำกัด และจะไม่ได้รับอีเมลหากเว็บส่งอีเมลไม่ได้ (ดู ตั้งค่า WordPress ให้ส่งอีเมลผ่าน SMTP) หรือ Error เกิดก่อนที่ WordPress จะโหลดส่วนนี้ ในกรณีนั้นให้ทำขั้นตอนถัดไป

ขั้นตอนที่ 2: เปิด WP_DEBUG บันทึกลงไฟล์

เปิด wp-config.php หาบรรทัด define( 'WP_DEBUG', false ); แล้วแทนที่ด้วยชุดนี้ (หากไม่มีบรรทัดดังกล่าว ให้เพิ่มก่อนบรรทัด /* That's all, stop editing! Happy publishing. */)

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
ค่าความหมาย
WP_DEBUGเปิดโหมด Debug ให้ PHP รายงาน Error ทุกระดับ
WP_DEBUG_LOGบันทึก Error ลงไฟล์ wp-content/debug.log
WP_DEBUG_DISPLAYตั้งเป็น false เพื่อไม่แสดง Error บนหน้าเว็บให้ผู้เข้าชมเห็น

define() แต่ละค่าต้องมีเพียงครั้งเดียวในไฟล์ หากมี WP_DEBUG ซ้ำสองบรรทัด PHP จะแจ้งเตือนว่าค่าคงที่ถูกกำหนดแล้ว

เพื่อไม่ให้ใครดาวน์โหลดไฟล์ Log ผ่านเบราว์เซอร์ได้ แนะนำให้ระบุตำแหน่งไฟล์ไว้นอกโฟลเดอร์เว็บ (รองรับตั้งแต่ WordPress 5.1)

define( 'WP_DEBUG_LOG', '/var/www/logs/wp-debug.log' );

โฟลเดอร์ปลายทางต้องมีอยู่และผู้ใช้ที่ PHP รันอยู่ต้องเขียนได้

ขั้นตอนที่ 3: ทำให้ Error เกิดซ้ำแล้วอ่าน Log

เปิดหน้าที่ขึ้น Critical Error อีกครั้ง 1-2 ครั้ง จากนั้นอ่านท้ายไฟล์ Log

tail -n 30 /var/www/example.com/wp-content/debug.log

ตัวอย่างผลลัพธ์

[19-Sep-2026 03:12:45 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function create_function()
in /var/www/example.com/wp-content/plugins/old-gallery/includes/widget.php:42
Stack trace:
#0 /var/www/example.com/wp-includes/class-wp-hook.php(324): og_register_widget()
...

อ่านจากบรรทัดที่มีคำว่า PHP Fatal error เป็นหลัก บรรทัด Warning, Notice และ Deprecated มักไม่ใช่ต้นเหตุของหน้าจอ Critical Error ให้ดูที่ Path ของไฟล์

  • อยู่ใน wp-content/plugins/ชื่อ/ แปลว่าปลั๊กอินนั้นเป็นต้นเหตุ
  • อยู่ใน wp-content/themes/ชื่อ/ แปลว่าธีมเป็นต้นเหตุ
  • อยู่ใน wp-includes/ หรือ wp-admin/ ให้ดู Stack trace ต่อลงไป มักมีบรรทัดที่ชี้ไปยังปลั๊กอินหรือธีม

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

ข้อความสาเหตุวิธีแก้
Call to undefined function create_function() หรือ each()โค้ดเก่าไม่รองรับ PHP 8อัปเดตหรือเปลี่ยนปลั๊กอิน/ธีม หรือย้อนเวอร์ชัน PHP ชั่วคราว
Allowed memory size of 268435456 bytes exhaustedหน่วยความจำ PHP ไม่พอดู เพิ่ม Memory Limit ใน WordPress
Call to undefined function mysqli_connect() หรือ imagecreatefromjpeg()ไม่ได้ติดตั้ง PHP Extensionติดตั้ง Extension เช่น php8.3-mysql, php8.3-gd แล้วรีสตาร์ต PHP-FPM
Cannot redeclare function ...ปลั๊กอินสองตัวชนกัน หรือติดตั้งซ้ำปิดปลั๊กอินตัวที่ติดตั้งล่าสุด
Maximum execution time of 30 seconds exceededงานใช้เวลานานเกินกำหนดหาสาเหตุที่ช้าก่อน แล้วค่อยพิจารณาเพิ่ม max_execution_time

เมื่อรู้ปลั๊กอินต้นเหตุแล้ว ปิดปลั๊กอินนั้นด้วย WP-CLI

wp plugin deactivate old-gallery --skip-plugins --skip-themes

หรือเปลี่ยนชื่อโฟลเดอร์ปลั๊กอิน ดูรายละเอียดที่ ปิดปลั๊กอิน WordPress เมื่อเข้าหลังบ้านไม่ได้ หากเป็นธีม ให้สลับไปใช้ธีมมาตรฐานชั่วคราว

wp theme activate twentytwentyfour --skip-plugins --skip-themes

ขั้นตอนที่ 4: หาก debug.log ว่างเปล่า

ถ้า Error เกิดก่อนที่ WordPress จะโหลด wp-config.php เสร็จ เช่น พิมพ์ผิดใน wp-config.php เอง ไฟล์ debug.log จะไม่ถูกสร้าง ให้ดู Error Log ของ PHP หรือเว็บเซิร์ฟเวอร์แทน

# Ubuntu + Nginx
sudo tail -n 50 /var/log/nginx/error.log
# Ubuntu + PHP-FPM (เปลี่ยนเลขเวอร์ชันตามเครื่อง)
sudo tail -n 50 /var/log/php8.3-fpm.log
# AlmaLinux/Rocky + PHP-FPM
sudo tail -n 50 /var/log/php-fpm/www-error.log

บน Plesk ดู Log ได้จากหน้า Logs ของโดเมน ดู ดู Log เว็บไซต์บน Plesk เพื่อหาสาเหตุ Error และตรวจ Syntax ของไฟล์ PHP ด้วยคำสั่ง

php -l /var/www/example.com/wp-config.php

ผลที่ถูกต้องคือ No syntax errors detected

ตรวจสอบผลลัพธ์

  • เปิดหน้าเว็บและหน้าหลังบ้านได้ตามปกติ ไม่มีหน้าจอ Critical Error
  • รัน tail -f wp-content/debug.log แล้วคลิกดูหลายหน้า ต้องไม่มี Fatal error ใหม่เกิดขึ้น
  • ดู Tools > Site Health ว่าไม่มีรายการ Critical ค้างอยู่

ขั้นตอนที่ 5: ปิด Debug เมื่อแก้เสร็จ

เปลี่ยนกลับเป็น define( 'WP_DEBUG', false ); และลบบรรทัด WP_DEBUG_LOG, WP_DEBUG_DISPLAY ออก จากนั้นลบไฟล์ Log ที่อาจมีข้อมูลภายใน เช่น Path และชื่อฐานข้อมูล

rm /var/www/example.com/wp-content/debug.log

ปัญหาที่พบบ่อย

ไม่มีไฟล์ debug.log เกิดขึ้น

PHP อาจไม่มีสิทธิ์เขียนโฟลเดอร์ wp-content ตรวจเจ้าของไฟล์ด้วย ls -ld wp-content หรือกำหนด Path ของ Log ไปยังโฟลเดอร์ที่เขียนได้

หน้าเว็บแสดง Error ดิบให้ผู้เข้าชมเห็น

ลืมตั้ง WP_DEBUG_DISPLAY เป็น false หรือ php.ini เปิด display_errors ไว้ ให้ตรวจทั้งสองจุด

ต้องการเห็น Error จริงแทนหน้าจอ Critical Error

สำหรับเครื่องทดสอบเท่านั้น สามารถปิดตัวจัดการ Error ของ WordPress ได้ด้วย define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); ห้ามใช้บนเว็บจริง

หากทำตามขั้นตอนแล้วยังติดปัญหา สามารถติดต่อทีมสนับสนุนของ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security