PHP
PHP ini คืออะไร และทำไมต้องปรับ?
ไฟล์ php.ini คือไฟล์กำหนดค่าหลักของ PHP ที่ควบคุมพฤติกรรมต่าง ๆ ของ Script ที่รันบนเซิร์ฟเวอร์ ไม่ว่าจะเป็นขนาดไฟล์ที่อัปโหลดได้สูงสุด หน่วยความจำที่ PHP ใช้ได้ต่อ Request หรือระยะเวลาสูงสุดที่ Script จะรันได้ก่อนหมดเวลา ค่าเริ่มต้นที่ Hosting ตั้งมานั้นเหมาะสำหรับเว็บไซต์ทั่วไป แต่หากคุณรัน WordPress, WooCommerce, หรือระบบจัดการไฟล์ขนาดใหญ่ บ่อยครั้งจะพบกับข้อผิดพลาดที่เกิดจากค่า Limit เหล่านี้ไม่เพียงพอ
บน Shared Hosting ที่ใช้ cPanel คุณไม่สามารถแก้ไข php.ini บนเซิร์ฟเวอร์โดยตรงได้ แต่ cPanel มีเครื่องมือชื่อ MultiPHP INI Editor ที่ให้คุณปรับค่า PHP สำหรับ Domain ของตัวเองได้อย่างปลอดภัย โดยไม่กระทบผู้ใช้รายอื่น บทความนี้จะพาคุณผ่านขั้นตอนทั้งหมดแบบ Step-by-Step
ค่า PHP ini ที่สำคัญที่ควรรู้
ก่อนจะเริ่มตั้งค่า มาทำความเข้าใจ Parameter หลัก ๆ ที่คุณน่าจะต้องปรับกัน:
- memory_limit — หน่วยความจำสูงสุดที่ PHP Script หนึ่งตัวใช้ได้ต่อ Request (ค่าปกติ 128M หรือ 256M)
- upload_max_filesize — ขนาดไฟล์สูงสุดที่อัปโหลดผ่าน Form ได้ใน Request เดียว (ค่าปกติ 2M หรือ 8M)
- post_max_size — ขนาด POST Body สูงสุดทั้งหมด ต้องตั้งให้มากกว่าหรือเท่ากับ
upload_max_filesizeเสมอ - max_execution_time — เวลาสูงสุด (วินาที) ที่ Script จะรันก่อนเซิร์ฟเวอร์บังคับหยุด (ค่าปกติ 30–60 วินาที)
- max_input_time — เวลาสูงสุดที่ PHP รอรับข้อมูล Input (รวมถึงการอัปโหลดไฟล์)
- max_input_vars — จำนวน Input Variable สูงสุดต่อ Request (สำคัญสำหรับ Form หรือ Theme ที่มีตัวเลือกเยอะ)
วิธีเปิด MultiPHP INI Editor ใน cPanel
ขั้นตอนการเข้าถึง MultiPHP INI Editor มีดังนี้:
- ล็อกอินเข้า cPanel ของ Hosting ที่ URL เช่น
https://yourdomain.com:2083หรือผ่าน Link ที่ Hosting ส่งให้ - ในหน้าหลัก cPanel ให้มองหาหมวด Software แล้วคลิก MultiPHP INI Editor
- ระบบจะแสดงหน้า Editor พร้อมให้เลือก Domain ที่ต้องการจัดการจาก Dropdown ด้านบน
- เลือก Domain ของคุณ แล้วคุณจะเห็น 2 โหมด ได้แก่ Basic Mode และ Editor Mode
การปรับค่าผ่าน Basic Mode (แนะนำสำหรับมือใหม่)
Basic Mode แสดงค่า Parameter ที่พบบ่อยในรูปแบบ Checkbox และ Input Field ให้กรอกได้เลย ไม่ต้องจำ Syntax ของ php.ini:
- คลิกแท็บ Basic Mode
- เลื่อนหาค่าที่ต้องการ เช่น
memory_limit,upload_max_filesize - กรอกค่าใหม่ในช่อง Input หรือเลือก Option ที่ต้องการ
- คลิก Apply เพื่อบันทึก
ตัวอย่างค่าที่แนะนำสำหรับ WordPress ทั่วไป:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120
max_input_time = 120
max_input_vars = 3000
การปรับค่าผ่าน Editor Mode (ยืดหยุ่นกว่า)
Editor Mode เปิดให้คุณแก้ไข php.ini ได้โดยตรงในรูปแบบ Text คล้ายกับการแก้ไขไฟล์จริง ๆ แต่ทำงานผ่านหน้าเว็บ:
- คลิกแท็บ Editor Mode
- ระบบจะแสดงเนื้อหาของ
php.iniปัจจุบันในช่อง Text - แก้ไขค่าที่ต้องการ หรือเพิ่ม Directive ใหม่
- คลิก Save เพื่อบันทึก
ตัวอย่างการตั้งค่าสำหรับเว็บอีคอมเมิร์ซหรือระบบอัปโหลดไฟล์หนัก:
; ตั้งค่าสำหรับ WooCommerce / ร้านค้าออนไลน์
memory_limit = 512M
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
max_input_time = 300
max_input_vars = 5000
default_socket_timeout = 60
; เปิดการบีบอัด Output
zlib.output_compression = On
post_max_size ต้องมากกว่าหรือเท่ากับ upload_max_filesize เสมอ ไม่เช่นนั้นการอัปโหลดจะถูกตัดโดย PHP ก่อนที่ Script จะได้ประมวลผลวิธีใช้ไฟล์ .htaccess ปรับค่า PHP (ทางเลือกเสริม)
หากคุณต้องการตั้งค่า PHP เฉพาะบางโฟลเดอร์ หรือ Hosting ของคุณไม่มี MultiPHP INI Editor สามารถใช้ไฟล์ .htaccess แทนได้ โดยเพิ่ม Directive ดังนี้:
# เพิ่มใน .htaccess ที่ root ของเว็บ
php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120
php_value max_input_vars 3000
วิธีนี้ใช้ได้กับ Apache Shared Hosting ที่เปิดใช้ mod_php หรือ php_admin_value แต่ถ้า Server ใช้ PHP-FPM (ซึ่งพบบ่อยขึ้นใน Hosting รุ่นใหม่) คำสั่ง php_value ใน .htaccess จะไม่ทำงาน และต้องใช้ MultiPHP INI Editor แทน
การตรวจสอบว่าค่าถูกนำไปใช้จริงผ่าน phpinfo()
หลังจากบันทึกการตั้งค่าแล้ว ควรตรวจสอบให้แน่ใจว่าค่าถูกนำไปใช้จริง ไม่ใช่แค่บันทึกในหน้า cPanel แต่ Server ยังใช้ค่าเดิม วิธีที่ง่ายที่สุดคือสร้างไฟล์ PHP ทดสอบ:
- สร้างไฟล์ใหม่ชื่อ
info.phpใน File Manager ของ cPanel - เพิ่มโค้ดด้านล่างแล้วบันทึก
- เปิดเบราว์เซอร์ไปที่
https://yourdomain.com/info.php - กด Ctrl+F แล้วค้นหาค่าที่ตั้ง เช่น
memory_limit - ลบไฟล์ทิ้งทันทีหลังตรวจสอบเสร็จ (ห้ามทิ้งไว้บนเซิร์ฟเวอร์)
<?php phpinfo(); ?>
สำหรับผู้ที่กำลังมองหา Hosting คุณภาพที่ตั้งค่า PHP ได้ยืดหยุ่น ลองดูที่ asiagb.com ผู้ให้บริการ Web Hosting และ VPS สัญชาติไทย ใช้ DirectAdmin รองรับ PHP หลายเวอร์ชัน SLA 99%
ตรวจสอบว่าการตั้งค่า PHP ini ทำงานถูกต้อง
หลังปรับค่าแล้ว ให้สร้างไฟล์ check_php.php ชั่วคราว แล้วรันผ่านเบราว์เซอร์เพื่อดูค่าจริงที่ PHP ใช้:
<?php
// ตรวจสอบค่า PHP ini ที่ใช้งานจริง
echo 'memory_limit: ' . ini_get('memory_limit') . "\n";
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . "\n";
echo 'post_max_size: ' . ini_get('post_max_size') . "\n";
echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n";
echo 'max_input_vars: ' . ini_get('max_input_vars') . "\n";
// ตรวจสอบ PHP Version ที่ใช้งาน
echo 'PHP Version: ' . PHP_VERSION . "\n";
// ตรวจสอบว่า .htaccess override ทำงานหรือไม่
echo 'Loaded php.ini: ' . php_ini_loaded_file() . "\n";
?>
check_php.php และ info.php ออกจากเซิร์ฟเวอร์ทันทีหลังใช้งาน เพราะไฟล์เหล่านี้เปิดเผยข้อมูลระบบที่อาจถูก Hacker นำไปใช้ประโยชน์ได้แก้ปัญหาที่พบบ่อย
Error: "Fatal error: Allowed memory size of X bytes exhausted"
ข้อผิดพลาดนี้เกิดเมื่อ PHP Script ใช้หน่วยความจำเกินกว่าที่กำหนดใน memory_limit พบบ่อยใน WordPress ที่ติด Plugin เยอะหรือ Theme ที่ซับซ้อน แก้ไขโดยเพิ่มค่า memory_limit ผ่าน MultiPHP INI Editor เป็น 256M หรือ 512M หากยังไม่หาย ให้ตรวจสอบว่า Plugin ตัวใดใช้ Memory สูงผิดปกติ
Error: "The uploaded file exceeds the upload_max_filesize directive"
ข้อผิดพลาดนี้แสดงเมื่อไฟล์ที่อัปโหลดมีขนาดใหญ่กว่าค่า upload_max_filesize ที่ตั้งไว้ แก้ไขโดยเพิ่มทั้ง upload_max_filesize และ post_max_size ให้พอกับขนาดไฟล์ที่ต้องการอัปโหลด โดย post_max_size ต้องมากกว่าเท่าเดิมด้วย:
upload_max_filesize = 128M
post_max_size = 128M
Error: "Maximum execution time of X seconds exceeded"
เกิดเมื่อ Script ใช้เวลานานเกินกว่าค่า max_execution_time พบบ่อยในระหว่าง Import ฐานข้อมูลขนาดใหญ่, Update Plugin จำนวนมาก, หรือประมวลผลรูปภาพ แก้ไขโดยเพิ่มค่าเป็น 120 หรือ 300 วินาที ขึ้นอยู่กับงานที่ทำ หาก Hosting ไม่อนุญาตให้เพิ่มสูงกว่า 60 วินาที ให้ติดต่อ Support
Error: "PHP Warning: POST Content-Length exceeds limit"
ข้อผิดพลาดนี้เกิดจาก post_max_size น้อยเกินไป แม้ว่าจะตั้ง upload_max_filesize ไว้สูงแล้วก็ตาม PHP จะตรวจสอบ post_max_size ก่อนเสมอ ต้องแน่ใจว่าค่าทั้งสองสัมพันธ์กันถูกต้อง
ตั้งค่าแล้วแต่ค่าไม่เปลี่ยน (Still Shows Old Value)
สาเหตุที่พบบ่อย ได้แก่ Hosting ใช้ PHP-FPM แต่คุณแก้ผ่าน .htaccess, มีไฟล์ php.ini ใน Directory ย่อยที่ Override ค่าที่ตั้งไว้, หรือมีโค้ดใน Script ที่เรียก ini_set() ทับค่าอีกชั้น ให้ลองสร้างไฟล์ phpinfo() ดูค่า "Local Value" vs "Master Value" เพื่อหาต้นตอ
คำถามที่พบบ่อย
ถ้า Hosting ไม่มี MultiPHP INI Editor จะทำอย่างไร?
หาก Hosting ไม่มี MultiPHP INI Editor ให้ลองปรับผ่าน .htaccess ด้วย Directive php_value ก่อน ถ้าวิธีนี้ไม่ทำงาน (เพราะ Server ใช้ PHP-FPM) ให้ติดต่อ Support ของ Hosting เพื่อขอให้ปรับค่าให้ หรือพิจารณาอัปเกรด Package ที่เปิดให้แก้ไข PHP Configuration ได้
ตั้ง memory_limit สูงมาก ๆ เป็น 1G หรือมากกว่านั้นได้ไหม?
ใน Shared Hosting มักมีขีดจำกัดสูงสุดที่ Hosting กำหนดไว้ แม้คุณจะตั้งค่าสูงกว่านั้น Server จะใช้ค่าสูงสุดที่อนุญาตแทน โดยทั่วไป Shared Hosting จะอนุญาตสูงสุด 256M–512M ถ้าต้องการมากกว่านั้นควรพิจารณาอัปเกรดเป็น VPS ที่ควบคุมได้เต็มที่
การเปลี่ยนค่า PHP ini จะกระทบเว็บอื่นบน Shared Hosting ไหม?
ไม่กระทบ การปรับค่าผ่าน MultiPHP INI Editor หรือ .htaccess มีผลเฉพาะ Domain ของคุณเท่านั้น นี่คือข้อดีของระบบ MultiPHP ที่ cPanel ออกแบบมาเพื่อให้ผู้ใช้แต่ละคนบน Shared Hosting สามารถตั้งค่า PHP ของตัวเองได้อย่างอิสระ