Hosting
Memory Limit คืออะไรและทำไมถึงเต็ม
PHP Memory Limit คือขีดจำกัดปริมาณ RAM สูงสุดที่ PHP Script แต่ละตัวสามารถใช้ได้ในการรันครั้งหนึ่ง ค่านี้กำหนดอยู่ใน php.ini ด้วยค่าชื่อว่า memory_limit เมื่อ Script ใช้ RAM เกินค่าที่กำหนด PHP จะหยุดการทำงานทันทีและแสดงข้อผิดพลาด Fatal error: Allowed memory size of X bytes exhausted
บน Shared Hosting ค่า Memory Limit มักถูกตั้งไว้ที่ 64MB–128MB โดย Hosting Provider เพื่อป้องกันไม่ให้บัญชีใดบัญชีหนึ่งกิน RAM เกินส่วนแบ่ง เมื่อเว็บ WordPress ของคุณเติบโตขึ้นมี Plugin มากขึ้น หรือมีผู้ใช้งานพร้อมกันหลายคน โอกาสที่จะเจอปัญหา Memory Limit เต็มก็สูงขึ้นตามไปด้วย
สาเหตุหลักที่ทำให้ PHP ใช้ Memory เกิน Limit ได้แก่:
- Plugin จำนวนมาก — แต่ละ Plugin โหลดโค้ดเข้า Memory ทุกครั้งที่มีการ Request หน้าเว็บ
- Plugin ที่มี Memory Leak — Plugin เขียนโค้ดไม่ดี ไม่ปล่อย Memory คืนหลังใช้งาน
- Theme หนัก — Theme ที่โหลด Library, Framework หรือ Widget จำนวนมาก
- Query ฐานข้อมูลขนาดใหญ่ — ดึงข้อมูลจำนวนมากเข้า Memory พร้อมกัน เช่น Export สินค้าหลักพันรายการ
- Image Processing — Resize หรือ Compress รูปภาพขนาดใหญ่ด้วย PHP ต้องการ RAM มาก
- WooCommerce — การประมวลผล Order, Checkout, และ Product Catalog ต้องการ RAM สูงกว่า WordPress ทั่วไป
ข้อผิดพลาดนี้สามารถเกิดได้ทั้งกับผู้ใช้ทั่วไปที่เข้าชมเว็บ และกับ Admin ที่พยายามติดตั้ง Plugin, อัพโหลดไฟล์, หรือทำ Import/Export ข้อมูลใน wp-admin ดังนั้นการแก้ปัญหานี้จึงสำคัญมากสำหรับการดูแลเว็บให้ทำงานได้ปกติ
ตรวจสอบ Memory Limit ปัจจุบันด้วย phpinfo
ก่อนจะแก้ไข Memory Limit ควรตรวจสอบก่อนว่าขณะนี้ค่า memory_limit ของ Hosting เราถูกตั้งไว้เท่าไหร่ วิธีที่ง่ายที่สุดคือการสร้างไฟล์ phpinfo.php ขึ้นมาบน Hosting แล้วเปิดผ่าน Browser
สร้างไฟล์ชื่อ phpinfo.php ใน Root Folder ของเว็บ (public_html) มีเนื้อหาดังนี้:
<?php phpinfo(); ?>
จากนั้นเปิด Browser ไปที่ https://yoursite.com/phpinfo.php แล้วกด Ctrl+F ค้นหาคำว่า memory_limit คุณจะเห็นค่าสองคอลัมน์คือ Local Value (ค่าที่ใช้งานจริงของโฟลเดอร์นั้น) และ Master Value (ค่าเริ่มต้นของ Server)
นอกจากนี้ยังสามารถตรวจสอบได้จาก WordPress โดยตรงผ่าน wp-admin → Tools → Site Health → Info → Server จะมีข้อมูล PHP Memory Limit แสดงอยู่ หรือจะใช้คำสั่ง PHP ง่าย ๆ เพื่อดูค่าก็ได้:
<?php echo ini_get('memory_limit'); ?>
สำคัญมาก: หลังตรวจสอบเสร็จแล้ว ต้องลบไฟล์ phpinfo.php ออกทันที เพราะไฟล์นี้เปิดเผยข้อมูล Server ที่ละเอียดอ่อนซึ่ง Hacker อาจนำไปใช้โจมตีได้
- ค่าที่เห็นใน Local Value คือค่าจริงที่ PHP ใช้งาน
- ถ้า Local Value = Master Value แสดงว่ายังไม่มีการ Override ใด ๆ
- ถ้า Local Value ต่ำกว่า 128MB มักเป็นสาเหตุของปัญหา
- WordPress เองก็แสดงค่าแนะนำใน Site Health — หากเห็น "Consider increasing..." แปลว่าค่าต่ำเกินไป
แก้ Memory Limit ผ่าน php.ini ใน cPanel
วิธีนี้เป็นวิธีที่แนะนำที่สุดสำหรับผู้ที่ใช้ Shared Hosting เพราะสามารถควบคุมได้ระดับโฟลเดอร์และมีผลทันทีโดยไม่ต้องแก้ไฟล์ WordPress ค่าที่ตั้งใน php.ini จะ Override ค่าจาก Configuration ระดับ Server
วิธีเข้าถึงไฟล์ php.ini บน cPanel:
- Login เข้า cPanel ของ Hosting
- ไปที่ File Manager (ในกลุ่ม Files)
- นำทางไปที่โฟลเดอร์ public_html
- หาไฟล์ชื่อ
php.ini— ถ้าไม่มีให้สร้างใหม่ (New File) - แก้ไขหรือเพิ่มบรรทัดนี้:
memory_limit = 256M - บันทึกไฟล์
เนื้อหาใน php.ini ที่แนะนำสำหรับ WordPress:
memory_limit = 256M
max_execution_time = 300
max_input_time = 300
upload_max_filesize = 64M
post_max_size = 64M
max_input_vars = 3000
บาง Hosting มีเครื่องมือ MultiPHP INI Editor ใน cPanel ซึ่งช่วยให้แก้ไขค่า PHP Configuration ได้ง่ายขึ้นโดยไม่ต้องแก้ไขไฟล์โดยตรง ให้ไปที่ cPanel → Software → MultiPHP INI Editor เลือก Domain หรือโฟลเดอร์ที่ต้องการ แล้วค้นหาและแก้ไขค่า memory_limit ได้เลย
- ค่าแนะนำสำหรับ WordPress ทั่วไป: 128M–256M
- ค่าแนะนำสำหรับ WooCommerce: 256M–512M
- ใช้ตัวอักษร M (Megabyte) หรือ G (Gigabyte) ต่อท้ายตัวเลขเสมอ
- ไม่ควรตั้งค่า -1 (ไม่จำกัด) บน Shared Hosting เพราะ Hosting จะ Block ค่านี้
แก้ Memory Limit ผ่าน wp-config.php
อีกวิธีที่นิยมใช้โดยเฉพาะสำหรับ WordPress คือการกำหนด Memory Limit ใน wp-config.php ซึ่งเป็นไฟล์ Configuration หลักของ WordPress ไฟล์นี้อยู่ที่ Root ของ WordPress Installation ปกติคือใน public_html/wp-config.php
WordPress มีค่า Constant พิเศษสองตัวสำหรับควบคุม Memory:
WP_MEMORY_LIMIT— กำหนด Memory สำหรับ Frontend (หน้าเว็บที่ผู้เข้าชมเห็น)WP_MAX_MEMORY_LIMIT— กำหนด Memory สำหรับ Admin (wp-admin) ซึ่งมักต้องการมากกว่า
เปิดไฟล์ wp-config.php ผ่าน cPanel File Manager แล้วเพิ่มบรรทัดเหล่านี้ก่อนบรรทัด /* That's all, stop editing! Happy publishing. */:
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
วิธีนี้จะทำงานได้ก็ต่อเมื่อ PHP Server อนุญาตให้ WordPress เพิ่มค่าได้ หากค่าที่ Server ตั้งไว้ต่ำกว่าค่าที่ระบุใน wp-config.php วิธีนี้จะไม่มีผล เพราะ PHP จะใช้ค่าที่น้อยกว่าเสมอ ดังนั้นวิธีนี้เหมาะเป็น Fallback เสริมจาก php.ini มากกว่าใช้คนเดียว
- เหมาะสำหรับคนที่ไม่มีสิทธิ์แก้ php.ini โดยตรง
- ต้องวางโค้ดก่อนบรรทัด
/* That's all */เสมอ - ระวัง Syntax Error — PHP Single Quote และ Double Quote ใช้ได้ทั้งคู่
- หลังบันทึกให้ Refresh หน้าเว็บและตรวจสอบผลด้วย phpinfo อีกครั้ง
แก้ Memory Limit ผ่าน .htaccess
สำหรับเซิร์ฟเวอร์ที่ใช้ Apache (ซึ่งเป็น Web Server มาตรฐานของ Shared Hosting ส่วนใหญ่) สามารถกำหนดค่า PHP ผ่านไฟล์ .htaccess ได้ด้วย ไฟล์ .htaccess อยู่ใน Root ของ WordPress เช่นกัน (public_html/.htaccess)
เพิ่มบรรทัดต่อไปนี้ใน .htaccess:
php_value memory_limit 256M
php_value max_execution_time 300
php_value upload_max_filesize 64M
php_value post_max_size 64M
อย่างไรก็ตาม วิธีนี้มีข้อจำกัดสำคัญ: ใช้ได้เฉพาะกับ Hosting ที่รัน PHP ในโหมด mod_php หรือ suPHP เท่านั้น หากเซิร์ฟเวอร์ใช้ PHP-FPM (ซึ่งพบมากขึ้นในยุคปัจจุบัน) คำสั่ง php_value ใน .htaccess จะทำให้เกิด Internal Server Error 500 แทน
- ทดสอบก่อนเสมอ — ถ้าเว็บ Error 500 หลังแก้ .htaccess ให้ลบบรรทัดนั้นออกทันที
- วางคำสั่งไว้ตอนต้นของ .htaccess ก่อน WordPress Rewrite Rules
- ไม่เหมาะกับ Nginx Server เพราะ Nginx ไม่อ่านไฟล์ .htaccess
- ถ้าไม่แน่ใจว่า Server ใช้ Apache Mode ไหน ให้ลองดูใน phpinfo() ที่ค่า Server API
สรุปลำดับความสำคัญของทั้ง 3 วิธี: php.ini > wp-config.php > .htaccess ค่าใน php.ini จะ Override ค่าจากทั้ง wp-config.php และ .htaccess ดังนั้นถ้าแก้ wp-config.php หรือ .htaccess แล้วไม่ได้ผล ให้กลับไปแก้ที่ php.ini แทน
เมื่อไหร่ที่ต้อง Upgrade Hosting แทนการเพิ่ม Memory
การเพิ่ม Memory Limit ไม่ใช่ทางออกที่ดีเสมอไป บางครั้งปัญหาที่แท้จริงคือเว็บโตเกิน Capacity ของ Shared Hosting ไปแล้ว การ Upgrade Hosting จึงเป็นทางเลือกที่ถูกต้องกว่า
สัญญาณที่บอกว่าถึงเวลาต้อง Upgrade Hosting:
- เพิ่ม Memory Limit ถึงขีดสูงสุดที่ Hosting อนุญาต (เช่น 512MB) แต่ยังมีปัญหาอยู่
- เว็บโหลดช้าแม้จะเพิ่ม Memory แล้ว เพราะ CPU หรือ I/O ของ Shared Server ไม่พอ
- มีผู้เข้าชมพร้อมกันจำนวนมาก (Concurrent Users) ทำให้ Memory ถูกใช้หมดเร็ว
- เจอ Resource Limit เตือนบ่อย ๆ ใน cPanel ทั้ง CPU, Memory, และ I/O
- ใช้ WooCommerce แบบเต็มรูปแบบที่มีสินค้าหลักพันและ Order สูง
- ต้องการความเสถียรสูง ไม่รับความเสี่ยงจากการแชร์ Resource กับเว็บอื่น
ตัวเลือกที่แนะนำเมื่อถึงเวลา Upgrade:
- Cloud Hosting / Managed WordPress Hosting — ได้ Resource เฉพาะตัว Auto Scale ได้ ราคาสูงกว่า Shared เล็กน้อย
- VPS (Virtual Private Server) — ควบคุมได้เต็มที่ RAM เฉพาะของตัวเอง แต่ต้องมีความรู้ Linux เพิ่มขึ้น
- Dedicated Server — เหมาะกับเว็บที่ต้องการ Resource สูงสุดและ Traffic หนักมาก
ถ้าเว็บยังเล็กและเพิ่งเริ่ม การเพิ่ม Memory Limit บน Shared Hosting ก็เพียงพอ แต่ถ้าเว็บเริ่มทำรายได้และมี Traffic สม่ำเสมอ การลงทุนกับ Hosting ที่ดีขึ้นถือเป็นการลงทุนที่คุ้มค่าสำหรับธุรกิจระยะยาว
ตรวจสอบว่า Memory Limit เปลี่ยนแล้ว
หลังจากแก้ไขค่า Memory Limit ด้วยวิธีใดวิธีหนึ่งข้างต้น ต้องตรวจสอบว่าค่าเปลี่ยนจริงหรือไม่ก่อนจะถือว่างานเสร็จ
<!-- วิธีที่ 1: ตรวจสอบด้วย phpinfo() -->
<?php phpinfo(); ?>
<!-- เปิดไฟล์ใน Browser แล้วค้นหา memory_limit -->
<!-- Local Value ต้องแสดงค่าใหม่ที่ตั้งไว้ -->
<!-- วิธีที่ 2: แสดงค่า memory_limit ตรง ๆ -->
<?php echo 'Memory Limit: ' . ini_get('memory_limit'); ?>
<!-- วิธีที่ 3: ตรวจสอบใน WordPress Admin -->
<!-- wp-admin → Tools → Site Health → Info → Server -->
<!-- ดูที่ "PHP memory limit" -->
<!-- วิธีที่ 4: ตรวจสอบด้วย WP-CLI (ถ้า Hosting รองรับ) -->
wp eval 'echo WP_MEMORY_LIMIT;'
ถ้าค่าที่เห็นยังไม่เปลี่ยน ให้ลองล้าง Cache ของ Browser ก่อน แล้วลองเปิดหน้าใหม่ในโหมด Incognito/Private หากยังไม่เปลี่ยน แสดงว่าค่าจาก Server Level Override ค่าที่ตั้งไว้อยู่ ให้ลองแก้ไขผ่าน php.ini แทนหรือติดต่อ Hosting Support เพื่อขอให้เพิ่มค่าให้
แก้ปัญหาที่พบบ่อย
Error: Allowed memory size exhausted — Memory Limit ยังต่ำ ตั้งค่ายังไม่มีผล
ถ้ายังเจอ Error นี้หลังจากแก้ไขแล้ว หมายความว่าค่าที่ตั้งไว้ยังไม่มีผลกับ PHP จริง สาเหตุที่พบบ่อยคือไฟล์ php.ini ที่แก้ไขไม่ใช่ไฟล์ที่ PHP อ่าน หรือวางไฟล์ผิดโฟลเดอร์ ให้ตรวจสอบว่า phpinfo() แสดง "Loaded Configuration File" ชี้ไปที่ไฟล์ไหน แล้วแก้ไขไฟล์นั้นแทน นอกจากนี้บาง Hosting ต้องการให้ Restart PHP-FPM ก่อนค่าจะมีผล ลองติดต่อ Support เพื่อให้ช่วย Restart
wp-config.php ตั้งแล้วแต่ไม่มีผล — Hosting Override ค่าด้วย php.ini Level สูงกว่า
นี่คือปัญหาที่พบบ่อยมาก wp-config.php ใช้ฟังก์ชัน ini_set() ในการเพิ่ม Memory ซึ่งทำได้เฉพาะกรณีที่ PHP ยังไม่ถูก Lock ค่านั้น แต่บน Shared Hosting Provider บางเจ้าจะกำหนดค่า Memory Limit เป็น PHP_INI_SYSTEM Level ซึ่ง User ไม่สามารถ Override ได้ด้วย ini_set() ทางออกคือต้องแก้ผ่าน php.ini โดยตรงหรือขอให้ Hosting Provider ช่วยเพิ่มค่าให้ผ่านการเปิด Support Ticket
Memory เพิ่มแล้วแต่ Plugin ยังพังอยู่ — Plugin นั้นมี Memory Leak จริง ๆ ต้องเปลี่ยน
หากเพิ่ม Memory ถึง 512MB แล้วยัง Error อยู่ แสดงว่า Plugin นั้นมีปัญหา Memory Leak จริง ๆ คือมันใช้ RAM ไม่หยุด ไม่มีขีดจำกัด ทางแก้คือ Deactivate Plugin นั้นออกแล้วหาทางเลือกอื่น หรือรายงาน Bug ให้ผู้พัฒนา Plugin แก้ไข คุณสามารถหา Plugin ที่มีปัญหาได้โดย Deactivate ทีละตัวแล้วดูว่า Error หายไปเมื่อ Deactivate Plugin ไหน
เพิ่ม Memory แล้ว Site Load นานกว่าเดิม — กิน RAM มากขึ้น ต้อง Optimize Code
การเพิ่ม Memory Limit ทำให้ PHP Script สามารถกิน RAM ได้มากขึ้น ซึ่งบน Shared Hosting อาจทำให้ Server ทำงานหนักขึ้นและ Response Time นานขึ้น ทางออกที่ถูกต้องระยะยาวคือ Optimize โค้ดและ Plugin ให้ใช้ RAM น้อยลง ใช้ Caching Plugin เช่น W3 Total Cache หรือ WP Super Cache ลด Plugin ที่ไม่จำเป็นออก และพิจารณา Upgrade ไป VPS หรือ Cloud Hosting ที่มี Resource เพียงพอ
คำถามที่พบบ่อย
memory_limit ขั้นต่ำที่ 128MB สำหรับเว็บทั่วไปที่มี Plugin พื้นฐาน หากใช้ WooCommerce, Page Builder เช่น Elementor หรือ Divi หรือมี Plugin จำนวนมากกว่า 20 ตัว ควรตั้งที่ 256MB ขึ้นไป สำหรับเว็บ E-commerce ที่มีสินค้าจำนวนมากและ Traffic หนัก แนะนำ 512MB หรือพิจารณาเปลี่ยนไป VPS ที่มี RAM เฉพาะของตัวเอง