ข้ามไปยังเนื้อหา
การตั้งค่า

วิธีเพิ่มขนาดอัปโหลดไฟล์สูงสุดใน WordPress (ทุกโฮสต์)

เช็กขีดจำกัดการอัปโหลดปัจจุบันของ WordPress แล้วเพิ่มให้ถูกที่สำหรับโฮสต์ของคุณ: php.ini, .user.ini, .htaccess, cPanel, Nginx หรือ Cloudflare

เผยแพร่แล้ว อัปเดตแล้ว

การเพิ่มขีดจำกัดการอัปโหลดใน WordPress ทำได้โดยเพิ่มค่า PHP สองตัว คือ upload_max_filesize และ post_max_size ในไฟล์ตั้งค่าที่โฮสต์ของคุณอ่านจริง ไฟล์นั้นคือ php.ini บนเซิร์ฟเวอร์ที่คุณดูแลเอง .user.ini บนโฮสต์แบบแชร์ส่วนใหญ่ที่รัน PHP-FPM หรือ FastCGI .htaccess เฉพาะเมื่อ Apache รัน PHP เป็นโมดูล หรือ MultiPHP INI Editor ใน cPanel ถ้าเซิร์ฟเวอร์ของคุณใช้ Nginx ให้เพิ่ม client_max_body_size ด้วย การแก้ wp-config.php จะไม่เปลี่ยนขีดจำกัดการอัปโหลด

เครื่องมือขนาดอัปโหลดสูงสุดของ WordPress จะแปลงขนาดเป้าหมายหนึ่งค่าให้เป็นค่าที่ตรงกันสำหรับ php.ini (หรือ .user.ini), .htaccess และ wp-config.php คุณจึงวางได้เลยโดยไม่ต้องพิมพ์เอง

ขั้นที่ 1: เช็กขีดจำกัดการอัปโหลดปัจจุบัน

ก่อนเปลี่ยนอะไร ให้ดูว่าตอนนี้ขีดจำกัดเท่าไหร่ และค่าไหนเป็นตัวกำหนด

  • Media > Add New หน้าอัปโหลดจะแสดงขนาดไฟล์อัปโหลดสูงสุด นี่คือตัวเลขที่คุณต้องการเพิ่ม
  • Tools > Site Health > Info ขยายส่วน Media handling เอกสาร Site Health ระบุสิ่งที่แสดงตรงนั้น ได้แก่ ขนาดสูงสุดของข้อมูล POST ที่อนุญาต ขนาดสูงสุดของไฟล์ที่อัปโหลด และขนาดไฟล์สูงสุดที่ใช้จริง ซึ่งคือค่าที่น้อยกว่าในสองค่านั้น ส่วน Server จะแสดงค่า PHP อื่นๆ เพิ่มเติม
หน้า Upload Media ของ WordPress มีบรรทัด Maximum upload file size: 2 GB อยู่ใต้พื้นที่อัปโหลด
ตำแหน่งที่ขีดจำกัดแสดงบนหน้าอัปโหลด คือใต้พื้นที่อัปโหลด ค่า 2 GB เป็นของเซิร์ฟเวอร์ทดสอบของเรา โฮสต์หลายเจ้าตั้งไว้น้อยกว่านี้มาก
หน้า Site Health Info ของ WordPress ส่วน Media Handling แสดงรายการ max size of post data allowed, max size of an uploaded file และ max effective file size
Tools > Site Health > Info > Media Handling บนเว็บทดสอบของเรา โดยขีดจำกัดของ post data, ไฟล์ที่อัปโหลด และค่า effective แยกกันคนละแถว

WordPress คำนวณขีดจำกัดใน wp_max_upload_size() ซึ่งอ่าน upload_max_filesize และ post_max_size จาก PHP แล้วใช้ค่าที่น้อยกว่า ถ้าค่าหนึ่งเป็น 64M และอีกค่าเป็น 8M ขีดจำกัดของคุณคือ 8M

ขั้นที่ 2: รู้ว่าค่าไหนสำคัญ

ค่าตั้งสิ่งที่จำกัดค่าเริ่มต้นของ PHPเปลี่ยนได้ที่ไหน
upload_max_filesizeไฟล์เดี่ยวที่ใหญ่ที่สุดที่อัปโหลดได้2Mphp.ini, .user.ini, .htaccess, httpd.conf
post_max_sizeคำขอ POST ทั้งหมด รวมไฟล์8Mphp.ini, .user.ini, .htaccess, httpd.conf
memory_limitหน่วยความจำที่ PHP ใช้ได้ขณะทำงาน128Mได้ทุกที่ รวมถึง wp-config.php
max_execution_timeจำนวนวินาทีที่สคริปต์ทำงานได้30ได้ทุกที่ รวมถึง wp-config.php
client_max_body_size (Nginx)ขนาด body ของคำขอที่ Nginx รับ1mเฉพาะในคอนฟิก Nginx

ค่าเริ่มต้นของ PHP และโหมดการเปลี่ยนค่ามาจาก รายการ directive ของ php.ini ส่วนค่าเริ่มต้นของ Nginx มาจาก เอกสารโมดูล core ของ Nginx โฮสต์ส่วนใหญ่ตั้งค่าสูงกว่าค่าเริ่มต้นของ PHP จึงควรดูตัวเลขจริงของคุณใน Site Health

upload_max_filesize และ post_max_size เป็นสิ่งที่ PHP เรียกว่าค่าแบบ INI_PERDIR คือ “ตั้งได้ใน php.ini, .htaccess, httpd.conf หรือ .user.ini” และไม่มีที่อื่น memory_limit ไม่ได้จำกัดขนาดไฟล์ แต่ WordPress ต้องใช้หน่วยความจำในการสร้างสำเนาย่อขนาดของรูปใหญ่ ไฟล์ใหญ่จึงอาจยังล้มเหลวด้วย error หน่วยความจำหมด หลังจากไฟล์มาถึงแล้ว

ขั้นที่ 3: เพิ่มขีดจำกัดให้ถูกที่สำหรับโฮสต์ของคุณ

ระบบของคุณตั้งค่าที่ไหนหมายเหตุ
VPS หรือ dedicated serverphp.ini ที่ PHP โหลดจริงรีสตาร์ต PHP-FPM หรือ Apache หลังแก้
โฮสต์แบบแชร์ที่ใช้ PHP-FPM หรือ FastCGI.user.ini ในโฟลเดอร์หลักของ WordPressอาจใช้เวลาถึง 5 นาทีกว่าจะมีผล
Apache ที่รัน PHP เป็นโมดูล (mod_php).htaccess ด้วย php_valueทำให้เกิด error 500 ภายใต้ PHP-FPM หรือ FastCGI
โฮสต์ที่ใช้ cPanelSoftware > MultiPHP INI Editorเขียน php.ini, .user.ini หรือ .htaccess ให้อัตโนมัติ
Nginx อยู่หน้า PHPclient_max_body_size และค่า PHPไม่อย่างนั้น Nginx จะส่ง 413
Managed WordPress hostingแดชบอร์ดหรือฝ่ายซัพพอร์ตของโฮสต์หลายเจ้าจำกัดการอัปโหลดที่ระดับแพลตฟอร์ม
เว็บที่อยู่หลัง Cloudflareขีดจำกัดการอัปโหลดของ Cloudflare เอง100 MB ในแพ็กเกจ Free และ Pro

php.ini (เซิร์ฟเวอร์ที่คุณดูแลเอง)

หาไฟล์ที่ถูกโหลดก่อน สร้างไฟล์ชั่วคราวที่มี <?php phpinfo(); เปิดในเบราว์เซอร์ อ่านบรรทัด “Loaded Configuration File” แล้วลบไฟล์นั้นทิ้ง จากนั้นแก้ php.ini ตัวนั้น:

upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 300

แล้วรีสตาร์ต PHP เพื่อให้อ่านค่าใหม่ ถ้าใช้ PHP-FPM ชื่อ service จะมีเวอร์ชันอยู่ด้วย เช่น sudo systemctl restart php8.3-fpm บน Debian หรือ Ubuntu ถ้าใช้ mod_php ให้รีสตาร์ต Apache

.user.ini (โฮสต์แบบแชร์ส่วนใหญ่)

PHP อ่าน ไฟล์ .user.ini เฉพาะเมื่อรันเป็น CGI หรือ FastCGI ซึ่งรวมถึง PHP-FPM สร้างหรือแก้ .user.ini ในโฟลเดอร์ที่มี wp-config.php:

upload_max_filesize = 128M
post_max_size = 130M

PHP จะอ่านไฟล์เหล่านี้ใหม่ทุก user_ini.cache_ttl วินาที ซึ่งค่าเริ่มต้นคือ 300 รอห้านาทีก่อนสรุปว่าไม่ได้ผล หรือรีสตาร์ต PHP-FPM ถ้าทำได้

.htaccess (เฉพาะ Apache ที่ใช้ mod_php)

php_value upload_max_filesize 128M
php_value post_max_size 130M

คู่มือ PHP อธิบาย directive เหล่านี้สำหรับ PHP ที่รันเป็นโมดูลของ Apache ถ้าเว็บขึ้น 500 Internal Server Error ทันทีหลังบันทึก แปลว่า PHP รันแบบ FastCGI หรือ PHP-FPM ให้ลบบรรทัดเหล่านี้ออกแล้วใช้ .user.ini แทน

cPanel MultiPHP INI Editor

ใน cPanel เปิด Software > MultiPHP INI Editor เลือกโดเมน แล้วเปลี่ยนค่าใน Basic Mode ตาม เอกสารของ cPanel Basic Mode จะบันทึกลงไฟล์ php.ini, .user.ini และ .htaccess ในที่ที่แต่ละไฟล์รองรับค่านั้น คุณจึงไม่ต้องรู้ว่าเซิร์ฟเวอร์ใช้ไฟล์ไหน

Nginx

Nginx ตรวจขนาดคำขอก่อนที่ PHP จะเห็น เมื่อคำขอใหญ่กว่า client_max_body_size Nginx จะส่ง 413 Request Entity Too Large ค่าเริ่มต้นคือ 1m ให้ใส่ค่าที่ใหญ่อย่างน้อยเท่า post_max_size ในบล็อก server:

client_max_body_size 130M;

ทดสอบและ reload ด้วย sudo nginx -t && sudo systemctl reload nginx บน Apache ค่าที่เทียบเท่ากันคือ LimitRequestBody ซึ่งแทบไม่ต้องเปลี่ยนบนโฮสต์ WordPress ทั่วไป

Managed hosting และ Cloudflare

managed WordPress hosting บางเจ้าไม่สนใจ php.ini หรือ .user.ini ของคุณ และตั้งขีดจำกัดไว้สำหรับทั้งแพลตฟอร์ม ถ้า Site Health ยังแสดงตัวเลขเดิมหลังจากแก้แล้ว ให้ถามโฮสต์ว่าค่าสูงสุดเท่าไหร่และเพิ่มให้ได้ไหม

ถ้าเว็บผ่าน Cloudflare ตัว Cloudflare มีขีดจำกัดของตัวเอง เอกสารเรื่อง cache ระบุขนาดอัปโหลดสูงสุดไว้ที่ 100 MB ในแพ็กเกจ Free และ Pro, 200 MB ใน Business และสูงสุด 5 GB ใน Enterprise ไม่มีค่า PHP ไหนข้ามขีดจำกัดนี้ได้

ทำไม wp-config.php ใช้ไม่ได้

หลายบทความแนะนำให้เพิ่มโค้ดนี้ใน wp-config.php:

@ini_set( 'upload_max_filesize', '128M' );
@ini_set( 'post_max_size', '130M' );

ทั้งสองค่าเป็น INI_PERDIR และเอกสารของ PHP บอกว่าค่าในโหมดนี้ตั้งด้วย ini_set() ไม่ได้ เครื่องหมาย @ ซ่อนความล้มเหลวไว้ บรรทัดเหล่านี้จึงดูไม่มีพิษภัยและไม่เปลี่ยนอะไร สิ่งที่ wp-config.php เปลี่ยนได้คือหน่วยความจำ เพราะ memory_limit ตั้งได้ทุกที่:

define( 'WP_MEMORY_LIMIT', '256M' );

วิธีนี้ช่วยเมื่อรูปใหญ่ล้มเหลวระหว่างประมวลผล แต่ไม่เปลี่ยนขนาดไฟล์อัปโหลดสูงสุด

ขั้นที่ 4: ยืนยันการเปลี่ยนแปลง

โหลดหน้า Media > Add New ใหม่ แล้วดูว่าขนาดไฟล์อัปโหลดสูงสุดแสดงค่าใหม่หรือยัง ถ้ายังไม่เปลี่ยน:

  • ตรวจว่า post_max_size ใหญ่อย่างน้อยเท่า upload_max_filesize เพราะ WordPress ใช้ค่าที่น้อยกว่า
  • ยืนยันว่าคุณแก้ไฟล์ที่ PHP โหลดจริง php.ini ที่อยู่ผิดโฟลเดอร์จะถูกเพิกเฉย
  • รอห้านาทีหลังแก้ .user.ini หรือรีสตาร์ต PHP-FPM
  • ถ้าตัวเลขใน WordPress เปลี่ยนแล้ว แต่อัปโหลดยังล้มเหลวด้วย 413 แปลว่าตัวที่บล็อกอยู่ที่ Nginx, proxy ของโฮสต์ หรือ Cloudflare
  • ถ้าไฟล์ไปถึง WordPress แล้วล้มเหลวด้วย “HTTP error” แปลว่าขนาดไม่ใช่ปัญหาแล้ว คู่มือ HTTP error ตอนอัปโหลดรูปใน WordPress อธิบายสาเหตุที่พบบ่อยไว้

ควรตั้งค่าไว้สูงแค่ไหน?

ตั้งให้พอกับไฟล์ที่ใหญ่ที่สุดที่คุณต้องอัปโหลดจริง เผื่อไว้นิดหน่อย และให้ post_max_size สูงกว่า upload_max_filesize เล็กน้อย ไฟล์ใหญ่ยังใช้เวลาอัปโหลดนานขึ้นด้วย ให้เพิ่ม max_execution_time ถ้าไฟล์ใหญ่ timeout บนเน็ตช้า สำหรับไฟล์ใหญ่มาก เช่น วิดีโอยาวหรือไฟล์ backup การอัปโหลดผ่าน SFTP หรือปลั๊กอินที่อัปโหลดแบบแบ่งส่วน (chunked) มักเชื่อถือได้มากกว่าการอัปโหลดก้อนใหญ่ครั้งเดียวผ่านเบราว์เซอร์ และขีดจำกัดตามแพ็กเกจ Cloudflare ก็อาจทำให้อัปโหลดผ่านเบราว์เซอร์ไม่ได้อยู่ดี

เมื่อรู้ค่าเป้าหมายแล้ว เครื่องมือขนาดอัปโหลดสูงสุด จะเขียนบรรทัด PHP ที่ตรงกันให้ ถ้าเซิร์ฟเวอร์ของคุณใช้ Nginx ให้เพิ่มบรรทัด Nginx จากคู่มือนี้เอง

FAQ

คำถาม

จะดูขีดจำกัดการอัปโหลดปัจจุบันใน WordPress ได้อย่างไร?

ไปที่ Media > Add New หน้าอัปโหลดจะแสดงขนาดไฟล์อัปโหลดสูงสุด ถ้าอยากดูรายละเอียด ให้เปิด Tools > Site Health > Info แล้วขยาย Media handling ซึ่งแสดงขนาดสูงสุดของไฟล์ที่อัปโหลด ขนาดสูงสุดของข้อมูล POST และขนาดไฟล์สูงสุดที่ใช้จริง ซึ่งคือค่าที่น้อยกว่าในสองค่านั้น

ทำไม WordPress ถึงขึ้นว่าไฟล์ที่อัปโหลดเกินค่า upload_max_filesize ใน php.ini?

ไฟล์ใหญ่กว่าค่า upload_max_filesize ของ PHP WordPress ไม่ได้ตั้งขีดจำกัดนี้เอง แต่อ่านค่ามาจาก PHP ให้เพิ่ม upload_max_filesize และ post_max_size พร้อมกันใน php.ini, .user.ini หรือ .htaccess (บน Apache ที่ใช้ mod_php) ค่าเริ่มต้นของ upload_max_filesize ใน PHP เองมีแค่ 2M แม้ว่าโฮสต์ส่วนใหญ่จะตั้งค่าไว้สูงกว่านั้น

เพิ่มขีดจำกัดการอัปโหลดจาก wp-config.php ได้ไหม?

ไม่ได้ upload_max_filesize และ post_max_size เป็นค่าแบบ PHP_INI_PERDIR ซึ่ง PHP รับจาก php.ini, .htaccess, httpd.conf หรือ .user.ini เท่านั้น บรรทัด ini_set() ใน wp-config.php จะทำงานโดยไม่มี error แต่ไม่เปลี่ยนอะไรเลย wp-config.php เพิ่ม memory limit ของ WordPress ได้ แต่หน่วยความจำไม่ใช่สิ่งที่จำกัดขนาดไฟล์

ทำไมยังเจอ 413 Request Entity Too Large หลังเพิ่มค่า PHP แล้ว?

มีบางอย่างที่อยู่ก่อนถึง PHP ปฏิเสธคำขอ บน Nginx คือ client_max_body_size ซึ่งค่าเริ่มต้นเป็น 1m และจะส่ง error 413 เมื่อเกิน ให้เพิ่มค่านี้ในบล็อก server แล้ว reload Nginx ถ้าเว็บของคุณผ่าน Cloudflare ขีดจำกัดขนาดอัปโหลดตามแพ็กเกจของ Cloudflare ก็อาจหยุดคำขอก่อนถึงเซิร์ฟเวอร์ได้เช่นกัน

post_max_size ต้องใหญ่กว่า upload_max_filesize ไหม?

ควรใหญ่อย่างน้อยเท่ากัน และใหญ่กว่าเล็กน้อยจะปลอดภัยกว่า ไฟล์ถูกส่งไปในคำขอ POST พร้อมข้อมูลอื่นในฟอร์ม คำขอทั้งหมดจึงนับรวมใน post_max_size WordPress ใช้ค่าที่น้อยกว่าในสองค่านี้เป็นขีดจำกัดการอัปโหลด การเพิ่มแค่ upload_max_filesize จึงทำให้ขีดจำกัดยังเท่าเดิม