ตั้งค่า PHP.ini บน DirectAdmin เพิ่ม Memory Limit และ Upload Size

เคยเจอปัญหา WordPress แจ้ง "Fatal error: Allowed memory size of X bytes exhausted" หรืออัพโหลดไฟล์ไม่ได้เพราะขนาดเกินลิมิตไหม? ปัญหาเหล่านี้แก้ได้ง่ายๆ ด้วยการปรับค่าใน PHP.ini บทความนี้จะแนะนำวิธีตั้งค่า PHP.ini บน DirectAdmin Hosting อย่างถูกต้อง ตั้งแต่พื้นฐานจนถึงการตั้งค่าที่แนะนำสำหรับเว็บ WordPress, WooCommerce และ CMS ทั่วไป

PHP.ini คืออะไร

PHP.ini คือไฟล์ Configuration หลักของ PHP ที่กำหนดพฤติกรรมของ PHP บนเซิร์ฟเวอร์ เช่น ขนาด Memory ที่อนุญาต ขนาดไฟล์ที่อัพโหลดได้สูงสุด เวลาที่ Script รันได้นานที่สุด และการแสดง Error บน Shared Hosting แต่ละ Virtual Host มีค่า PHP.ini แยกกัน ทำให้ผู้ใช้แต่ละรายตั้งค่าได้อิสระโดยไม่กระทบกัน

วิธีแก้ไข PHP.ini บน DirectAdmin

วิธีที่ 1: ผ่าน DirectAdmin PHP Settings

วิธีที่ง่ายที่สุด โดยไม่ต้องแก้ไฟล์ตรงๆ:

  1. Login เข้า DirectAdmin
  2. ไปที่ Advanced Features → PHP Settings
  3. ปรับค่าที่ต้องการในฟอร์ม เช่น memory_limit, upload_max_filesize
  4. คลิก Save

วิธีที่ 2: สร้างไฟล์ php.ini ใน public_html

สร้างไฟล์ชื่อ php.ini ในโฟลเดอร์ public_html ของเว็บ (หรือโฟลเดอร์ที่ต้องการ) แล้วใส่ค่าที่ต้องการ:

memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300 max_input_vars = 3000

วิธีที่ 3: ใช้ .htaccess (PHP CGI/FastCGI)

บางเซิร์ฟเวอร์รองรับการตั้งค่า PHP ผ่าน .htaccess:

php_value memory_limit 256M php_value upload_max_filesize 64M php_value post_max_size 64M php_value max_execution_time 300

หมายเหตุ: วิธี .htaccess ใช้ได้กับ PHP ที่รันแบบ mod_php เท่านั้น หากใช้ PHP-FPM (ซึ่งพบบ่อยบน DirectAdmin ใหม่) ต้องใช้ php.ini แทน

ค่า PHP.ini ที่สำคัญและความหมาย

ค่าค่า Defaultแนะนำสำหรับ WordPressความหมาย
memory_limit128M256MMemory สูงสุดที่ PHP Script ใช้ได้
upload_max_filesize2M64Mขนาดไฟล์ที่อัพโหลดได้สูงสุดต่อไฟล์
post_max_size8M64Mขนาด POST Request สูงสุด ต้องมากกว่า upload_max_filesize
max_execution_time30300เวลา (วินาที) ที่ Script รันได้สูงสุด
max_input_time60300เวลาที่รอรับ Input ได้สูงสุด
max_input_vars10003000จำนวนตัวแปร Input สูงสุด (สำหรับ Form ขนาดใหญ่)

ค่าที่แนะนำสำหรับ WordPress

WordPress มีความต้องการ PHP Resources สูงกว่าเว็บทั่วไป โดยเฉพาะเมื่อติดตั้ง Plugin หลายตัว:

; WordPress Recommended Settings memory_limit = 256M upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300 max_input_vars = 3000 date.timezone = Asia/Bangkok

ค่าที่แนะนำสำหรับ WooCommerce

WooCommerce ร้านค้าออนไลน์ต้องการ Memory สูงกว่า WordPress ทั่วไป:

; WooCommerce / E-Commerce Settings memory_limit = 512M upload_max_filesize = 128M post_max_size = 128M max_execution_time = 600 max_input_vars = 5000

ตาราง Directive PHP.ini ที่ใช้บ่อยบน DirectAdmin พร้อมค่าแนะนำ

เมื่อจัดการ Hosting บน DirectAdmin ของ AsiaGB ค่า PHP directive ส่วนใหญ่ที่คุณต้องปรับจะวนอยู่กับ 5 ตัวหลักด้านล่าง ตารางนี้สรุปค่า Default ของ PHP มาตรฐานเทียบกับค่าที่แนะนำสำหรับเว็บ WordPress และ WooCommerce บน Shared Hosting เพื่อให้ปรับครั้งเดียวจบ ไม่ต้องไล่ลองทีละค่า

Directiveค่า Defaultแนะนำ (WordPress)แนะนำ (WooCommerce)ทำหน้าที่อะไร
memory_limit128M256M512Mเพดาน Memory ที่ PHP Script เรียกใช้ได้ต่อ Request — ปลั๊กอินหนักๆ เช่น page builder, ตัวสร้าง backup กินค่านี้มากที่สุด
upload_max_filesize2M64M128Mขนาดไฟล์เดียวที่อัพโหลดได้สูงสุด — ถ้าอัพ theme/plugin zip หรือรูปความละเอียดสูงไม่ได้ ให้เพิ่มค่านี้
post_max_size8M64M128Mขนาด POST Request รวมสูงสุด — ต้องตั้งให้ ≥ upload_max_filesize เสมอ ไม่งั้นอัพไฟล์ใหญ่ไม่ผ่านแม้ upload_max_filesize จะพอ
max_execution_time30300600เวลา (วินาที) ที่ Script รันได้นานสุดก่อนถูกตัด — งาน import สินค้า/อัพเดตฐานข้อมูลใหญ่ต้องการค่านี้สูง
max_input_vars100030005000จำนวนตัวแปร Input สูงสุดต่อ Request — ธีม/ปลั๊กอินที่มีหน้า Settings ยาวๆ (ตัวเลือกหลักร้อย) จะชน 1000 ทำให้เซฟค่าไม่ครบ

เคล็ดลับ: ตั้ง post_max_size ให้มากกว่า upload_max_filesize เล็กน้อยเสมอ (เช่น 64M/68M) เพราะ POST รวมทั้ง field อื่นๆ ในฟอร์มด้วย ไม่ใช่แค่ไฟล์อย่างเดียว

แก้ค่า PHP.ini ใน DirectAdmin (Custom PHP Settings / .user.ini)

นอกจากเมนู PHP Settings มาตรฐานแล้ว DirectAdmin รุ่นใหม่ที่รัน PHP-FPM ยังรองรับการตั้งค่าผ่านไฟล์ .user.ini ซึ่งเป็นวิธีที่ยืดหยุ่นและทำงานได้แน่นอนกว่าเมื่อ Hosting ไม่ใช้ mod_php คุณสามารถเลือกใช้วิธีใดวิธีหนึ่งตามความถนัด

ผ่านเมนู Custom PHP Settings ของ DirectAdmin

DirectAdmin บางเวอร์ชันมีเมนู Custom PHP / PHP Settings ที่ให้กรอกค่า directive เป็นบรรทัดได้โดยตรง โดยไม่ต้องสร้างไฟล์เอง:

  1. Login เข้า DirectAdmin แล้วไปที่ Account Manager → Domain Setup เลือกโดเมนที่ต้องการ
  2. เปิดส่วน PHP Version / PHP Settings ของโดเมนนั้น
  3. กรอก directive ที่ต้องการในช่อง Custom Settings เช่น memory_limit=256M บรรทัดละค่า
  4. กด Save — ค่ามีผลทันทีกับโดเมนนั้นโดยไม่กระทบโดเมนอื่นใน Account

ผ่านไฟล์ .user.ini (วิธีที่แนะนำสำหรับ PHP-FPM)

ถ้า Hosting รัน PHP-FPM (ค่าเริ่มต้นของ DirectAdmin รุ่นใหม่) ให้สร้างไฟล์ชื่อ .user.ini ไว้ใน public_html แทนการสร้าง php.ini — DirectAdmin จะอ่านไฟล์นี้อัตโนมัติ:

; .user.ini — วางไว้ใน public_html
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 68M
max_execution_time = 300
max_input_vars = 3000

หมายเหตุสำคัญ: ค่าใน .user.ini จะไม่อัพเดตทันทีเหมือน php.ini เพราะ PHP-FPM แคชไว้ตามค่า user_ini.cache_ttl (ปกติ 300 วินาที) ถ้าแก้แล้วยังไม่เห็นผล ให้รอ ~5 นาที หรือสั่ง Restart PHP-FPM จาก DirectAdmin

ค่าที่ WordPress / WooCommerce ต้องการ

ทั้ง WordPress และ WooCommerce มีเอกสารแนะนำ (Server Requirements) ที่ระบุค่าขั้นต่ำเอาไว้ ถ้าตั้งต่ำกว่านี้ระบบจะยังพอทำงานได้แต่เสี่ยงเจอ error เวลาทำงานหนัก เช่น อัพเดตปลั๊กอินจำนวนมากพร้อมกัน หรือ import สินค้าหลายพันรายการ

WordPress (เว็บทั่วไป / บล็อก / องค์กร)

WooCommerce (ร้านค้าออนไลน์)

WooCommerce มีหน้า Status → System Status ในเมนู Admin ที่จะแสดงค่า PHP ปัจจุบันและเตือนเป็นสีแดงถ้าค่าใดต่ำกว่าที่แนะนำ ใช้หน้านี้ตรวจได้เร็วกว่าการเปิด phpinfo()

ตรวจค่า (phpinfo) + ปัญหาที่พบบ่อย (413, white screen, timeout)

หลังปรับค่าแล้วควรยืนยันว่าค่ามีผลจริงเสมอ เพราะบางครั้งค่าที่ตั้งอาจถูก Override โดยค่าของ Server หรือไฟล์อยู่ผิดโฟลเดอร์ วิธีตรวจที่แม่นที่สุดคือดูจาก phpinfo() ตามที่อธิบายไว้ด้านบน — ให้สังเกตคอลัมน์ Local Value (ค่าที่มีผลกับเว็บคุณ) เทียบกับ Master Value (ค่าระดับ Server)

HTTP 413 Request Entity Too Large

มักเจอเวลาอัพโหลดไฟล์ใหญ่แล้วเซิร์ฟเวอร์ตอบ 413 ก่อนถึง PHP ด้วยซ้ำ สาเหตุคือลิมิตที่ระดับ Web Server (Nginx/Apache) ไม่ใช่แค่ PHP ให้เพิ่มทั้ง upload_max_filesize + post_max_size และถ้ายังไม่หาย ให้แจ้งทีมงานเพื่อปรับ client_max_body_size (Nginx) ให้สอดคล้องกัน

White Screen of Death (หน้าขาวเปล่า)

หน้าจอขาวเปล่าไม่มี error มักเกิดจาก memory_limit หมดกลางการประมวลผล ให้เพิ่มเป็น 256M หรือ 512M แล้วเปิด display_errors ชั่วคราว (หรือดู error log ใน DirectAdmin) เพื่อยืนยันสาเหตุที่แท้จริง อย่าปล่อย display_errors เปิดถาวรบนเว็บจริง

Maximum execution time exceeded / Gateway Timeout

Script ที่รันนานเกิน max_execution_time จะถูกตัดและขึ้น Fatal error ส่วน 504 Gateway Timeout เกิดที่ระดับ Web Server ให้เพิ่ม max_execution_time เป็น 300–600 สำหรับงานหนัก และพิจารณาแบ่งงาน import เป็นชุดย่อยแทนการรันทีเดียวจบ

ตรวจสอบค่า PHP.ini ปัจจุบัน

สร้างไฟล์ phpinfo.php ใน public_html เพื่อดูค่า PHP.ini ที่ใช้งานจริง:

<?php phpinfo(); ?>

เข้าดูที่ yourwebsite.com/phpinfo.php แล้วค้นหาค่าที่ต้องการ เมื่อดูเสร็จแล้วอย่าลืม ลบไฟล์นี้ออก เพราะเป็นความเสี่ยงด้านความปลอดภัย

แก้ Error ที่พบบ่อยจาก PHP Settings

Fatal error: Allowed memory size exhausted

แก้โดยเพิ่ม memory_limit เช่น เป็น 256M หรือ 512M

Maximum file size exceeded

เพิ่มทั้ง upload_max_filesize และ post_max_size ให้เท่ากัน (หรือ post_max_size ต้องมากกว่า)

Maximum execution time of 30 seconds exceeded

เพิ่ม max_execution_time เป็น 300 หรือมากกว่า สำหรับ Script ที่ทำงานนาน เช่น Import ข้อมูล

AsiaGB Hosting รองรับ PHP 7.4, 8.2, 8.3 สามารถเปลี่ยน PHP Version ได้จาก DirectAdmin และตั้งค่า PHP.ini ได้อิสระต่อ Domain ราคาเริ่มต้น 500 บาท/ปี SSD, Inode 50,000, Uptime 99%

ค่า PHP.ini สำหรับ CMS ยอดนิยมอื่นๆ (Joomla, Magento, Laravel)

WordPress และ WooCommerce เป็นเพียงส่วนหนึ่งของ CMS และ Framework ที่ใช้บน Shared Hosting ระบบอื่นๆ ก็ต้องการการปรับค่า PHP.ini เช่นกัน โดยเฉพาะเมื่อมีการประมวลผลข้อมูลจำนวนมากหรือทำงานกับ Library ขนาดใหญ่

Joomla CMS

Joomla ใช้ Resource ใกล้เคียงกับ WordPress โดยเฉพาะเมื่อติดตั้ง Extension จำนวนมาก ค่าที่แนะนำ:

; Joomla Recommended
memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 300
max_input_vars = 3000

Magento / Adobe Commerce

Magento เป็น E-Commerce Platform ที่ต้องการ Resource สูงมาก โดยเฉพาะการ Compile Theme และ Deploy Static Content ที่ใช้ Memory และเวลาสูง:

; Magento Recommended
memory_limit = 1024M
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 900
max_input_vars = 10000
realpath_cache_size = 10M
realpath_cache_ttl = 7200

หมายเหตุ: Magento บน Shared Hosting มักประสบปัญหาด้าน Performance เนื่องจาก Resource จำกัด ถ้าต้องการประสิทธิภาพเต็มที่ควรพิจารณาใช้ VPS Hosting ที่ควบคุม Memory และ CPU ได้อิสระ

Laravel / Framework PHP สมัยใหม่

Laravel และ PHP Framework สมัยใหม่ (Symfony, CodeIgniter) ต้องการค่า PHP.ini ที่เหมาะสมสำหรับการทำงาน Composer และ Artisan commands:

; Laravel / PHP Framework
memory_limit = 512M
max_execution_time = 300
max_input_vars = 5000
upload_max_filesize = 64M
post_max_size = 68M

PHP.ini กับการตั้งค่าด้านความปลอดภัย

นอกจากการปรับ Memory และ Upload Limit แล้ว PHP.ini ยังมีค่าที่เกี่ยวกับความปลอดภัยที่ควรรู้จักและตั้งค่าให้ถูกต้อง โดยเฉพาะบน Production Server ที่เปิดให้ผู้ใช้จริงเข้าถึง การตั้งค่าเหล่านี้ช่วยลดโอกาสที่ Script Error จะเปิดเผยข้อมูลสำคัญของระบบสู่สาธารณะ

ปิด display_errors บน Production

ค่า display_errors ควรปิดบนเว็บที่ให้ User จริงเข้าใช้งาน เพราะ PHP Error Message อาจแสดง Path ของไฟล์, ชื่อตาราง Database หรือข้อมูลอ่อนไหวอื่นๆ ที่ Hacker สามารถนำไปใช้ประโยชน์ได้:

; Production Security Settings
display_errors = Off
log_errors = On
error_log = /home/username/logs/php_error.log
expose_php = Off

จำกัด File Upload Path และ Session

สำหรับเว็บที่รับไฟล์อัพโหลดจาก User ควรตั้งค่าเพิ่มเติมเพื่อความปลอดภัย:

; Session Security
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
session.cookie_samesite = Strict

เคล็ดลับ: ตั้ง expose_php = Off เพื่อซ่อน PHP Version จาก Response Header — ป้องกันไม่ให้ Attacker รู้ว่าเว็บใช้ PHP เวอร์ชันอะไร และลดโอกาสการโจมตีแบบ Version-Specific

เปรียบเทียบวิธีตั้งค่า PHP.ini บน Hosting ต่างๆ

แต่ละ Control Panel และ Hosting Platform มีวิธีจัดการ PHP.ini ที่แตกต่างกัน ตารางด้านล่างช่วยให้เปรียบเทียบวิธีที่ใช้งานได้จริงบนแต่ละ Platform เพื่อให้ย้าย Hosting หรือปรับเปลี่ยนค่าได้อย่างถูกต้อง ไม่ต้องลองผิดลองถูก

Platform / Panel วิธีที่ 1 (แนะนำ) วิธีที่ 2 (ทางเลือก) หมายเหตุ
DirectAdmin (AsiaGB) PHP Settings Panel .user.ini ใน public_html PHP-FPM: ใช้ .user.ini; CGI: ใช้ php.ini
cPanel MultiPHP INI Editor php.ini ผ่าน File Manager มี Editor ใน GUI แต่ผลลัพธ์เหมือนกัน
Plesk PHP Settings → Custom php.ini ใน document root Plesk จัดการ PHP-FPM Pool แยกต่างหาก
VPS (Root Access) แก้ /etc/php/8.x/fpm/php.ini PHP-FPM Pool config ควบคุมได้เต็มที่ ไม่มีข้อจำกัด Policy

สำหรับเว็บที่ต้องการ Memory สูงกว่า 512M หรือต้องการ PHP Configuration แบบพิเศษที่ Shared Hosting ไม่รองรับ ทางเลือกที่ดีคือ VPS ของ AsiaGB ที่ให้ Root Access เต็มรูปแบบ ราคาเริ่มต้นที่ 500 บาท/เดือน

คำถามที่พบบ่อยเกี่ยวกับ PHP.ini บน DirectAdmin

ตั้งค่า PHP.ini กับ .user.ini ต่างกันอย่างไร ควรใช้อันไหน?

ทั้งสองทำงานคล้ายกันคือ Override ค่า PHP ระดับโดเมน แต่ .user.ini เป็นไฟล์มาตรฐานสำหรับ PHP-FPM (ค่าเริ่มต้นของ DirectAdmin รุ่นใหม่) ส่วน php.ini ในโฟลเดอร์มักใช้กับ PHP แบบ CGI/FastCGI ถ้าไม่แน่ใจว่า Hosting รันแบบไหน ให้ลองใช้ .user.ini ก่อน เพราะรองรับ PHP-FPM ซึ่งพบบ่อยที่สุดในปัจจุบัน

แก้ค่าใน DirectAdmin แล้วแต่ phpinfo ยังโชว์ค่าเดิม?

สาเหตุที่พบบ่อยมี 3 อย่าง: (1) ไฟล์ .user.ini ถูกแคชโดย PHP-FPM ให้รอ ~5 นาทีหรือ Restart PHP-FPM (2) ไฟล์อยู่ผิดโฟลเดอร์ ต้องอยู่ใน public_html ที่เว็บรันจริง (3) ค่านั้นถูก Server บังคับล็อกไว้ ดูได้จากคอลัมน์ Master Value ใน phpinfo ถ้าเป็นกรณีสุดท้ายต้องแจ้งทีมงาน

memory_limit ตั้งสูงเกินไปจะเปลือง Resource ไหม?

ค่า memory_limit คือ "เพดาน" ไม่ใช่ค่าที่จองไว้ตลอด PHP จะใช้ Memory เท่าที่ Script ต้องการจริงเท่านั้น การตั้ง 256M ไม่ได้แปลว่าทุก Request กิน 256M แต่ยอมให้ Script ที่หนักจริงๆ ใช้ได้ถึงเพดานนั้น อย่างไรก็ตามบน Shared Hosting ค่าสูงสุดที่ตั้งได้จะถูกจำกัดโดย Policy ของผู้ให้บริการอยู่แล้ว

เปลี่ยน PHP Version บน DirectAdmin แล้วค่า PHP.ini หายไหม?

ไม่หาย — ไฟล์ .user.ini หรือ php.ini ที่วางไว้ใน public_html ยังอยู่ครบและมีผลกับ PHP Version ใหม่ทันที แต่ควรตรวจว่า directive ที่ตั้งไว้ยังรองรับใน PHP เวอร์ชันใหม่ เพราะบาง directive อาจถูก Deprecated หรือลบออกในเวอร์ชันที่ใหม่กว่า

Hosting รองรับ PHP 7.4 / 8.2 / 8.3

ตั้งค่า PHP.ini ได้อิสระ memory_limit สูง รองรับ WordPress, WooCommerce และ CMS ทุกชนิด เริ่มต้น 500 บาท/ปี

ดูแพ็กเกจ Hosting