ในบทความนี้จะเป็นวิธีการแก้ไขปัญหา 500 Internal Server Error ที่ทำให้ WordPress พังนะครับ บางท่านอาจขึ้นเป็น “500 Internal Server Error” แบบนี้เลย หรือขึ้นว่า “เกิดข้อผิดพลาดร้ายแรงบนเว็บไซต์นี้ โปรดตรวจสอบคำแนะนำในกล่องข้อความในอีเมลผู้ควบคุมเว็บ” หรือ “There has been a critical error on this website. Please check your site admin email inbox for instructions”
แต่ไม่เป็นไรครับ ขึ้นแรกคืออย่าตื่นตระหนก ปัญหานี้แก้ได้ครับ
ปัญหานี้ถ้าเกิดขึ้น แน่นอนครับระบบหลังบ้านหรือ wp-admin เข้าไม่ได้ครับ ทีนี้จะแก้กันด้วยวิธีไหนได้บ้าง ก่อนอื่นต้องมาดูสาเหตุกันก่อนครับ
500 Internal Server Error / เกิดข้อผิดพลาดร้ายแรงบนเว็บไซต์นี้ คืออะไร
500 Internal Server Error / เกิดข้อผิดพลาดร้ายแรงบนเว็บไซต์นี้ เกิดจากหลากหลายสาเหตุครับ เช่น
- ไฟล์ .htaccess มีปัญหา
- ไฟล์โค๊ดปลั๊กอินหรือธีมไม่สมบูรณ์หรือติดบั๊ก
- ตัว WordPress มีปัญหา
- เซิร์ฟเวอร์โหลดหนักเกินไป
- PHP Memory Limit ไม่เพียงพอ
- ปัญหาเกิดขึ้นจากธีม ปลั๊กอิน หรือตัวเวิร์ดเพรสเองทำงานหนักจน PHP Memory ที่ให้มาไม่เพียงพอต่อการประมวลผลครับ เทียบกับบนคอมพิวเตอร์ของเรา เหมือน RAM เต็มและทำงานต่อไม่ได้ครับ จะทำงานต่อได้เมื่อโปรแกรมกินแรมน้อยลงนั่นเอง (PHP Memory ไม่เกี่ยวอะไรกับ RAM ของตัว Server ที่ใช้รันเว็บนะครับ)
แต่ทีนี้ ระบบไม่ได้บอกนะครับว่ามันเกิดจากอะไร มันแค่ขึ้นข้อความ “เกิดข้อผิดพลาดร้ายแรงบนเว็บไซต์นี้ โปรดตรวจสอบคำแนะนำในกล่องข้อความในอีเมลผู้ควบคุมเว็บ” หรือ “There has been a critical error on this website. Please check your site admin email inbox for instructions” เราจะแก้ปัญหาตรงนี้ยังไงดีครับ?
ก่อนหน้านี้ ได้ทำอะไรไปบ้างไหมครับ?
ลองนึกย้อนกลับไปก่อนเกิดปัญหาครับ ทำอะไรไปในเว็บไซต์บ้าง วิธีนี้จะทำให้การแก้ปัญหาง่ายขึ้นครับ ถ้ารู้ว่าก่อนหน้านี้ได้ทำอะไร เช่น
- อัพเดท Theme/Plugin/WordPress
- แก้ไขไฟล์ Theme/Plugin
- แก้ไขการตั้งค่า Theme/Plugin ในเว็บไซต์
- ลบไฟล์ในระบบ
หากได้กระทำการใด ๆ ในด้านบน จะสามารถหาต้นตอได้ง่ายครับ ไม่ต้องสุ่มหา
วิธีแก้ 500 Internal Server Error / เกิดข้อผิดพลาดร้ายแรงบนเว็บไซต์นี้
โฮสติ้งหลาย ๆ เจ้าเช่น Hostatom หรือ Cloudways มีแบ็คอัพรายวันครับ อาจย้อนกลับไปได้ถึง 24 ชั่วโมง ให้ลองติดต่อผู้ให้บริการหรือฝ่าย Support เพื่อถามหา backup ล่าสุดก่อนครับ หากมีในช่วงเวลาที่รับได้ การกู้ backup อาจเป็นวิธีที่ดีที่สุดครับ
หากได้รับอีเมลจากระบบที่ส่งมา
จะมีเมลส่งไปที่เมลหลักของผู้ดูแลระบบครับ ให้เช็คเมลที่มาจากเว็บไซต์เรา แล้วกดลิ้งค์ที่ยาว ๆ เข้าไปแก้ครับ แก้โดยการเข้าไปปิดธีมหรือปลั๊กอินที่มีปัญหา หรือแก้โค้ดให้กลับเป็นเหมือนเดิมหากเคยแก้อะไรไว้ หรือปรับการตั้งค่า Theme/Plugin ที่มีปัญหาให้กลับไปเป็นสภาพก่อนเกิดปัญหาครับ ส่วนปัญหาเกิดจากอะไรให้ดูที่บรรทัดล่าง ๆ ของเมลครับ ระบบจะแจ้งไว้ เท่านี้ปัญหาน่าจะหายแล้วครับ
แต่ถ้ายังไม่หาย หรือเมลไม่เข้า แม้แต่ใน Junk/Spam Box…
หากรู้ว่าปัญหาเกิดจาก Theme/Plugin ตัวใดตัวหนึ่ง หรือหลายตัว
สำรองข้อมูลก่อนครับ สำคัญมาก ๆ ครับ อาจลองติดต่อหา Hosting ว่า backup ล่าสุดเมื่อไหร่ เป็นก่อนวันหรือเวลาที่เกิดปัญหาไหมครับ ถ้ากู้ backup ได้อาจเป็นการแก้ปัญหาที่ดีกว่าครับ
หากได้แก้ไขการตั้งค่าหรือไฟล์ Theme/plugin ใด ๆ แล้วขึ้น Error นี้เลย วิธีที่ง่ายที่สุดคือปิดปลั๊กอิน/ธีมทิ้งก่อนครับ (วิธีปิดปลั๊กอินอยู่ในหัวข้อด้านล่างครับ) หากเป็นการแก้ไขให้แก้ไฟล์กลับเป็นเหมือนเดิมก่อนที่จะเป็นปัญหา หรือหากไม่มี backup ให้ลองหาไฟล์ plugin ต้นฉบับหรือเวอร์ชั่นที่เก่ากว่าเข้าทับดูนะครับ
หากไม่รู้ว่าเกิดจากอะไร
หากไม่รู้ว่าเกิดจากอะไร ผมไม่แนะนำให้ไปปิด Plugin/Theme สุ่มสี่สุ่มห้าครับ ทำให้เกิดปัญหาบานปลายได้ครับ โดยที่ WordPress มีฟังค์ชั่นที่เรียกว่า Debug ซึ่งจะทำให้เว็บไซต์แสดงหรือบันทึกข้อผิดพลาดภายในให้เราเห็นได้ครับ และจะได้เข้าแก้ถูกจุด
หากเข้าหลังบ้าน wp-admin ไม่ได้ ให้เตรียมรหัส FTP ครับ หากหาไม่เจอให้ลองทำตามวิธีการหารหัสโฮสติ้ง รหัส FTP ดูนะครับ และลองใช้โปรแกรมเช่น Filezilla เพื่อต่อเข้าโฮสติ้งนะครับ
ถ้าเข้าแล้ว รูปร่างหน้าตาของไฟล์เว็บไซต์จะเป็นดังรูป จะสังเกตว่ามี folder ชื่อว่า wp-admin, wp-content, wp-includes และไฟล์ขึ้นต้นด้วย wp- ทั้งหลายครับ แสดงว่าน่าจะมาถูกที่แล้ว
หากได้รหัสมาแล้ว สามารถทำตามขั้นตอนต่อไปนี้ได้เลยครับ
- ขั้นตอนที่ 1: เชื่อมต่อ FTP
- ขั้นตอนที่ 2: หาไฟล์ที่ชื่อว่า wp-config.php และคลิกขวาและ Edit หรือดาวน์โหลดลงเครื่องมาเพื่อแก้ไขด้วยโปรแกรมเช่น Notepad หรือ Visual Studio ก็ได้ครับ
- ขั้นตอนที่ 3: เปลี่ยน
define( 'WP_DEBUG', false );
จากfalse
เป็นtrue
ครับ เพื่อเปิดโหมด debug
- ขั้นตอน 4: ใส่โค้ดต่อไปนี้ต่อจากบรรทัด
define( 'WP_DEBUG', false );
ได้เลย
define( 'WP_DEBUG_DISPLAY', false );
// แสดง Debug ในหน้าจอ (จะปรับเป็น true ก็ได้นะครับ แต่ถ้ามีคนเข้าเว็บอยู่ก็จะเห็น Error บานเลยครับ ผมแนะนำให้ปรับเป็น True เฉพาะเว็บที่คนเข้าไม่เยอะหรือยังไม่ได้ Live นะครับ
define( 'WP_DEBUG_LOG', true ); // บันทึก error เป็นไฟล์เพื่ออ่านได้
ถ้าเสร็จแล้วหน้าตาจะออกมาประมาณนี้ครับ
เสร็จแล้วสามารถเซฟได้เลย ถ้าโปรแกรม Filezilla ถามว่าจะอัพโหลดทับไหม ให้คลิก Yes ได้เลยนะครับ หรือหากว่าดาวน์โหลดลงมาที่เครื่องแล้วค่อยอัพขึ้นไป สามารถอัพขึ้นไปทับไฟล์ wp-config ปัจจุบันได้เลยครับ
เสร็จลองไป refresh ที่หน้าเว็บ 1 ทีเพื่อให้ระบบมันเก็บข้อมูล (แต่หากมีคนเข้าอยู่แล้ว ไม่ต้องก็ได้ครับ) ในโปรแกรม Filezilla แล้วไปที่ wp-content จะเห็นว่าไฟล์ debug.log ครับ ให้คลิกขวาและแก้ไขไฟล์นั้น หรือดาวน์โหลดไฟล์นั้นและเปิดด้วย Notepad ได้เลยตามสะดวก
หมายเหตุ: หากในตัวโค้ด ช่อง 'WP_DEBUG_DISPLAY'
เป็น true
ตัว error log จะแสดงในหน้าเว็บเลยครับ ไม่ต้องทำตามขั้นตอนนี้
ในนี้แหละครับที่จะขึ้นว่า error เพราะอะไร อาจเป็นชื่อ plugin หรือ theme ที่คุ้น ๆ หรืออาจเคยเห็นไฟล์ที่แก้ไขไปแล้วและมีข้อผิดพลาดก็ได้ครับ
แต่หากเกิดจากไฟล์ WordPress ให้ลองดูหัวข้อด้านล่างนะครับ: หากปัญหาเกิดจากไฟล์ WordPress เอง
หากต้องการปิด เช่นในเคสนี้ Plugin Elementor มีปัญหา ผมจึงไปที่ wp-content/plugins และเปลี่ยนชื่อ Folder elementor เป็น elementor-fix เพื่อปิดปลั๊กอินครับ การที่เปลี่ยนชื่อโฟลเดอร์ Theme/Plugin ใดๆ ไปเป็นชื่ออื่นแม้แต่ตัวอักษรเดียว จะเป็นการปิดปลั๊กอินครับ
และเท่านี้ หากปลั๊กอินนี้ก่อปัญหาจริง เว็บจะสามารถเข้ามาใช้งานได้ครับ
หากแก้แล้วหาย…
การเปิด mode debug จะทำให้ระบบบันทึก error ทั้งหมดที่เกิดขึ้น ซึ่งอาจเปลืองทรัพยากรของเซิร์ฟเวอร์ อาจทำให้เซิร์ฟเวอร์ทำงาหนักขึ้นหรือไฟล์ debug.log มีขนาดใหญ่ขึ้น เมื่อไม่ใช้แล้วควรปิดโดยลบบรรทัด debug ทั้ง 2
ลองทั้งสองวิธีบนแล้ว ก็ยังไม่หาย
วิธีนี้จะเป็นการปิดปลั๊กอิน หรือ/และ ธีม ทุกตัว ในเว็บไซต์นะครับ หากทำแล้วต้องกลับไปเปิดใหม่ทั้งหมด อาจส่งผลต่อการใช้งานเว็บไซต์ได้ครับ กรุณาใช้อย่างระมัดระวังและแบ็คอัพ แบ็คอัพ แบ็คอัพครับ
ปิด Theme/Plugin ทั้งหมด
- โดยเราจะเปลี่ยนชื่อโฟลเดอร์ plugins และ/หรือ themes เป็นอย่างอื่นครับ (คำแนะนำผมให้ลบตัว s ข้างหลังออกตัวเดียวพอเพื่อกันสับสน)
- การกระทำนี้เป็นการปิดการใช้งานธีมหรือปลั๊กอินครับ โดยการที่เราเปลี่ยนชื่อโฟลเดอร์ จะทำให้ WordPress หาไฟล์ไม่เจอและปิดการใช้งาน theme/plugins ทั้งหมดโดยอัตโนมัติครับ เป็นการปิดทั้งหมดเลยนั่นเองแล้วมาไล่ดูกันว่าตัวไหนก่อปัญหา
- ทีนี้ล็อกอินเข้ามาใน wp-admin แล้ว WordPress จะฟ้องว่าหา theme/plugins ไม่เจอและจะปิดการทำงานของมัน
- ให้ใช้ ftp เปลี่ยนโฟลเดอร์ที่เราเปลี่ยนชื่อเปลี่ยนกลับเหมือนเดิมครับ เปลี่ยนโฟลเดอร์ธีมกลับเป็น themes และปลั๊กอินเป็น plugins
- ไล่เปิดการใช้งานธีม หรือปลั๊กอินดูทีละตัวแล้วกลับไปที่หน้าเว็บ แล้วลองกด Refresh หน้าเว็บดู แล้วดูครับว่าเปิดตัวไหน Refresh หน้าเว็บแล้วขึ้น 500 Error ตัวนั้นคือตัวปัญหาครับ ให้จัดการแก้ปัญหาต่อไป อาจลองอัพเกรดไปเวอร์ชั่นใหม่ ลองแก้ไขโค๊ดดูถ้าหากพัฒนาเอง หรือลบทิ้งแล้วหาตัวอื่นมาแทนครับ
หากปัญหาเกิดจากไฟล์ WordPress เอง
กรุณาจด Version WordPress ปัจจุบันเอาไว้นะครับ หากมีปัญหาจะได้ดาวน์โหลด WordPress version เดิมเข้าไปทับได้ หรือให้แบ็คอัพไว้ก่อนครับ ย้ำว่า Backup สำคัญมาก ๆ ครับ
- ลบโฟลเดอร์ wp-admin และ wp-includes ทิ้ง และไฟล์ที่ขึ้นต้นด้วย wp- ทั้งหมด (ยกเว้นโฟลเดอร์ wp-content และไฟล์ wp-config.php นะครับ)
- ดาวน์โหลดจาก wordpress.org แตกไฟล์และอัพโหลดไฟล์ทั้งหมด ยกเว้น folder wp-content ระบบจะถามว่าต้องการทับไฟล์ไหม ให้ทับได้เลยครับ
อีกหนึ่งความเป็นไปได้: ปัญหาเกิดจาก .htaccess file
ปัญหานี้อาจลองเริ่มจากการเช็คว่าไฟล์ .htaccess มีปัญหาหรือเปล่านะครับ ใช้ FTP เชื่อมต่อไปที่เว็บของเรา แล้วในโฟลเดอร์ที่ติดตั้ง WordPress เปลี่ยนชื่อไฟล์ .htaccess เป็นอย่างอื่นดูครับ เช่น .htaccess_backup ก็ได้
เสร็จแล้วเข้าหลังบ้าน (wp-admin) ไปที่ ตั้งค่า (Settings) -> ลิ้งค์ถาวร (Permalink) ไม่ต้องแก้ไขอะไรแล้วกดบันทึก (Save) เลยครับ ข้อนี้สำคัญนะครับ ไม่งั้นจะเข้าหน้าอื่นๆ นอกจากหน้าแรกไม่ได้เลย
หรือถ้ายังไม่หายอีก…
เพิ่ม PHP Memory Limit
อันนี้สำหรับท่านที่ใช้เว็บโฮสติ้งทั่วไปสามารถแจ้งทางผู้ให้บริการเว็บโฮสติ้งให้เพิ่มให้ได้นะครับ แจ้งเขาว่า“ผมต้องการเพิ่ม PHP Memory Limit หน่อยครับ เนื่องจากเว็บติด 500 Error เพราะ Memory Limit ไม่พอหลายครั้ง…”
แต่จะเพิ่มได้เท่าไหร่นั้นขึ้นกับนโยบายของผู้ให้บริการเว็บโฮสติ้งนะครับ บางเจ้าให้มาค่าเริ่มต้นเพียง 64MB ซึ่งบางทีไม่พอต่อการใช้งาน สามารถขอเขาเพิ่มให้เป็น 128MB, 256MB หรือถ้าโฮสไหนใจดีหน่อยให้ 512MB (ส่วนใหญ่ไม่มีหรอกครับ มากที่สุดเท่าที่เคยเจออยู่ที่ 256MB) เท่านี้ก็ไม่น่าติดปัญหาอะไรอีกแล้วครับ
แต่ถ้ามี Server เป็นของตัวเอง หรือเช่า VPS ผู้ใช้งานอาจต้องเพิ่มเองครับ โดยแก้ไฟล์ php.ini หา
php_memory_limit
แล้วแก้เอาได้ครับ
วิธีป้องกันไม่ให้เกิดขึ้นอีก
ปกติแล้วปัญหานี้เป็นแล้วไม่ค่อยเป็นอีกครับ ยกเว้นมีการแก้ไขไฟล์ธีมหรือปลั๊กอิน ถ้าจัดการปิดหรือแก้ไขธีม/ปลั๊กอิน/สคริปต์ WordPress/PHP Memory Limit ที่เป็นปัญหาแล้ว ถ้าเป็นอีกให้ลองอ่านไฟล์ Log ดูเลยครับว่าเป็นเพราะอะไรอีก อาจเกิดจากปลั๊กอินหรือธีมที่ใช้มีปัญหาจากทางทีมพัฒนา หรือโค้ดที่รันอยู่ทำงานไม่ถูกต้องก็ได้ครับ
แต่หากแก้แล้วไม่หาย มาหาเราได้เลยครับ MAKE2WEB ยินดีให้บริการ แก้ปัญหาเว็บไซต์