แก้ White Screen of Death บน WordPress

หน้าเว็บขาวเปล่า ไม่มี error? แก้ได้ด้วยขั้นตอนนี้ทีละขั้นตอน

แก้ White Screen of Death WordPress

White Screen of Death (WSoD) คืออะไร

White Screen of Death หรือ WSoD คืออาการที่เว็บ WordPress แสดงผลเป็นหน้าขาวเปล่าโดยไม่มีข้อความ error ใดๆ ปรากฏ ทำให้ไม่รู้ว่าเกิดอะไรขึ้น มักเกิดขึ้นหลังจากอัปเดต WordPress, ติดตั้ง plugin ใหม่, หรืออัปเดต theme

WSoD เกิดจาก PHP fatal error ที่ WordPress ไม่สามารถแสดงข้อความ error ออกมาได้เพราะ display_errors ถูกปิดใน production server ซึ่งเป็นการตั้งค่าที่ถูกต้องตามหลัก security แต่ทำให้วิเคราะห์ปัญหายากขึ้น

สาเหตุหลักของ WSoD

ขั้นตอนที่ 1 — เปิด WP_DEBUG

วิธีแรกที่ต้องทำคือเปิด WordPress debug mode เพื่อให้แสดง error ออกมา เข้า cPanel File Manager แล้วแก้ไข wp-config.php

// เปลี่ยนบรรทัดนี้
define('WP_DEBUG', false);

// เป็น (บันทึก error ไว้ในไฟล์ debug.log)
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false); // ไม่แสดงใน browser (ปลอดภัยกว่า)
ini_set('log_errors', 1);
ini_set('error_log', ABSPATH . 'wp-content/debug.log');

หลังบันทึกแล้ว refresh หน้าเว็บ จากนั้นเปิดไฟล์ wp-content/debug.log เพื่อดู error

ขั้นตอนที่ 2 — ดู PHP Error Log ของ Hosting

นอกจาก WordPress debug log แล้ว hosting ยังมี PHP error log ของตัวเอง

# ดู error log ผ่าน SSH
tail -50 ~/logs/error_log

# หรือ PHP-FPM log (แล้วแต่ server config)
tail -50 /var/log/php-fpm/error.log

# ดู Apache error log
tail -50 /var/log/apache2/error.log

ใน cPanel ให้ไปที่ Metrics > Errors เพื่อดู error log ล่าสุด

ขั้นตอนที่ 3 — Disable Plugin ทั้งหมดผ่าน FTP

ถ้าเข้า WordPress admin ไม่ได้เพราะ WSoD ให้ใช้ FTP หรือ cPanel File Manager เปลี่ยนชื่อโฟลเดอร์ plugin

# ใช้ FTP client (FileZilla) หรือ SSH
# เปลี่ยนชื่อโฟลเดอร์ plugins ทั้งหมด
mv wp-content/plugins wp-content/plugins_disabled

# ถ้าเว็บกลับมาทำงานได้ แสดงว่า plugin เป็นต้นเหตุ
# สร้าง plugins folder ใหม่
mkdir wp-content/plugins

# แล้วค่อยๆ copy plugin กลับมาทีละตัว
cp -r wp-content/plugins_disabled/akismet wp-content/plugins/

ขั้นตอนที่ 4 — Switch Theme ไปเป็น Default

ถ้า disable plugin แล้วยังขาวอยู่ ให้ลองเปลี่ยนชื่อโฟลเดอร์ theme ที่ใช้งานอยู่

# เปลี่ยนชื่อ theme ที่ active
mv wp-content/themes/your-theme wp-content/themes/your-theme_disabled

# WordPress จะ fallback ไปใช้ default theme (Twenty Twenty-Four)
# ถ้าเว็บกลับมา แสดงว่า theme มีปัญหา

ขั้นตอนที่ 5 — เพิ่ม Memory Limit

Memory limit ไม่เพียงพอเป็นสาเหตุ WSoD ที่พบบ่อยมาก แก้ได้หลายวิธี

# วิธีที่ 1: แก้ใน wp-config.php
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

# วิธีที่ 2: แก้ใน .htaccess
php_value memory_limit 256M

# วิธีที่ 3: สร้างไฟล์ php.ini ใน root directory
memory_limit = 256M
max_execution_time = 120
upload_max_filesize = 64M
post_max_size = 64M

ขั้นตอนที่ 6 — Reinstall WordPress Core Files

ถ้าทุกอย่างยังไม่แก้ปัญหา ให้ลอง reinstall WordPress core โดยไม่แตะไฟล์ wp-config.php และโฟลเดอร์ wp-content

# ดาวน์โหลด WordPress เวอร์ชันล่าสุด
wget https://wordpress.org/latest.zip
unzip latest.zip

# Copy เฉพาะ core files (ไม่แตะ wp-config.php และ wp-content)
rsync -av --exclude wp-config.php --exclude wp-content/ \
  wordpress/ /path/to/your/site/

ตรวจสอบว่าเว็บทำงานปกติหลังแก้ไข

# ตรวจสอบ HTTP response
curl -o /dev/null -w "%{http_code}" https://yoursite.com
# ผลที่ดี: 200

# ตรวจดูว่ามี error ใน debug.log หรือไม่
wc -l wp-content/debug.log

# ทดสอบ admin panel
curl -o /dev/null -w "%{http_code}" https://yoursite.com/wp-admin/

# ตรวจสอบ PHP memory usage
php -r "echo ini_get('memory_limit');"
Tip: หลังแก้ปัญหาแล้วอย่าลืมปิด WP_DEBUG กลับเป็น false ใน wp-config.php เพื่อป้องกันไม่ให้ข้อมูล sensitive รั่วไหลออกไปใน error message

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

WSoD เกิดเฉพาะหน้า Admin ไม่ใช่ทั้งเว็บ

สาเหตุมักเป็น plugin ที่ใช้ใน admin area เท่านั้น ให้ไปที่ wp-admin/plugins.php โดยตรงแล้ว deactivate plugin ที่เพิ่งติดตั้งหรืออัปเดตล่าสุด

WSoD หายไปเองแล้วกลับมาใหม่

อาจเป็น memory exhaustion ชั่วคราวที่เกิดจาก cron job หนักๆ หรือ traffic spike ให้เพิ่ม WP_MEMORY_LIMIT และตรวจสอบ cron job ที่รันบน WordPress

เปิด WP_DEBUG แล้วยังไม่เห็น Error

ตรวจสอบว่า wp-content/debug.log มีสิทธิ์ write ได้ (permission 644) หรือ cPanel error log ที่ Metrics > Errors อาจมีข้อมูลแทน

หลัง Reinstall Core แล้ว Theme/Plugin หาย

ถ้า rsync ทำถูกต้อง wp-content จะไม่ถูกแตะ หากหายจริง restore จาก backup ก่อน จากนั้น reinstall core อีกครั้งด้วยความระมัดระวัง

WSoD เกิดบน Mobile แต่ Desktop ปกติ

ตรวจสอบว่า theme มี mobile-specific code ที่มี syntax error หรือ responsive breakpoint ที่ทำให้ PHP crash ลอง disable responsive mode ใน theme settings ก่อน


คำถามที่พบบ่อย

WSoD ต่างจาก Error 500 ยังไง

Error 500 (Internal Server Error) มักมาจาก server configuration เช่น .htaccess ผิดพลาด หรือ PHP syntax error ส่วน WSoD คือหน้าขาวที่ HTTP status อาจเป็น 200 แต่เนื้อหาว่างเปล่า เกิดจาก PHP fatal error ที่ WordPress จับได้แต่ไม่แสดงออกมา

ถ้าแก้ไม่ได้เองควรทำอะไร

ติดต่อ hosting support พร้อมแนบ error log มาด้วย หรือ restore จาก backup ที่ทำไว้ก่อนหน้านี้ ถ้าไม่มี backup นี่คือเหตุผลว่าทำไมถึงต้องทำ backup อย่างสม่ำเสมอ

WSoD เกิดได้บ่อยแค่ไหน

ถ้า manage plugin/theme อย่างระมัดระวัง ทดสอบบน staging ก่อน update และมี backup อัตโนมัติ WSoD แทบจะไม่เกิดขึ้นเลย ปัญหานี้พบบ่อยในเว็บที่ไม่มีการ maintenance อย่างสม่ำเสมอ