แก้ปัญหา "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
- คลิกลิงก์ในอีเมล แล้วเข้าสู่ระบบตามปกติ
- ใน Recovery Mode ปลั๊กอินที่มีปัญหาจะถูกหยุดชั่วคราวเฉพาะสำหรับเซสชันของคุณ ให้ไปที่หน้า Plugins แล้ว Deactivate ปลั๊กอินนั้นจริง
- คลิก 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/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี


