Cách tăng giới hạn upload trong WordPress (mọi hosting)
Kiểm tra giới hạn upload WordPress hiện tại, rồi tăng nó đúng chỗ cho hosting của bạn: php.ini, .user.ini, .htaccess, cPanel, Nginx hoặc Cloudflare.
Để tăng giới hạn upload trong WordPress, hãy nâng hai thiết lập PHP là upload_max_filesize và post_max_size trong đúng file cấu hình mà hosting của bạn thực sự đọc. Đó là php.ini trên máy chủ bạn tự quản lý, .user.ini trên phần lớn shared hosting chạy PHP-FPM hoặc FastCGI, .htaccess chỉ khi Apache chạy PHP dưới dạng module, hoặc MultiPHP INI Editor trong cPanel. Nếu máy chủ chạy Nginx, hãy tăng cả client_max_body_size. Sửa wp-config.php sẽ không thay đổi giới hạn upload.
Công cụ dung lượng upload tối đa WordPress chuyển một dung lượng mục tiêu thành các giá trị khớp nhau cho php.ini (hoặc .user.ini), .htaccess và wp-config.php, để bạn dán vào thay vì gõ tay.
Bước 1: Kiểm tra giới hạn upload hiện tại
Trước khi thay đổi gì, hãy xem giới hạn hiện là bao nhiêu và thiết lập nào đang quyết định nó.
- Media > Thêm mới. Màn hình tải lên hiển thị dung lượng file tải lên tối đa. Đây là con số bạn muốn tăng.
- Công cụ > Tình trạng trang web > Thông tin. Mở phần Xử lý media. Tài liệu Tình trạng trang web liệt kê những gì hiển thị ở đó: dung lượng tối đa cho phép của dữ liệu POST, dung lượng tối đa của file tải lên, và dung lượng file hiệu dụng tối đa, tức giá trị nhỏ hơn trong hai giá trị. Phần Máy chủ hiển thị thêm các giá trị PHP.


WordPress tính giới hạn của nó trong wp_max_upload_size(), hàm này đọc upload_max_filesize và post_max_size từ PHP và dùng giá trị nhỏ hơn. Nếu một cái là 64M và cái kia là 8M, giới hạn của bạn là 8M.
Bước 2: Biết thiết lập nào quan trọng
| Thiết lập | Giới hạn điều gì | Mặc định của PHP | Đổi được ở đâu |
|---|---|---|---|
upload_max_filesize | File tải lên đơn lẻ lớn nhất | 2M | php.ini, .user.ini, .htaccess, httpd.conf |
post_max_size | Toàn bộ yêu cầu POST, gồm cả file | 8M | php.ini, .user.ini, .htaccess, httpd.conf |
memory_limit | Bộ nhớ PHP được dùng khi chạy | 128M | Ở bất cứ đâu, kể cả wp-config.php |
max_execution_time | Số giây một script được chạy | 30 | Ở bất cứ đâu, kể cả wp-config.php |
client_max_body_size (Nginx) | Phần thân yêu cầu Nginx chấp nhận | 1m | Chỉ trong cấu hình Nginx |
Các giá trị mặc định và chế độ thay đổi của PHP lấy từ danh sách chỉ thị php.ini; mặc định của Nginx lấy từ tài liệu module lõi Nginx. Phần lớn hosting đặt giá trị cao hơn mặc định của PHP, nên Tình trạng trang web là nơi để đọc con số thật của bạn.
upload_max_filesize và post_max_size là những thiết lập PHP gọi là INI_PERDIR: chúng “có thể đặt trong php.ini, .htaccess, httpd.conf hoặc .user.ini” và không ở đâu khác. memory_limit không giới hạn dung lượng file, nhưng WordPress cần bộ nhớ để tạo bản sao đổi cỡ của ảnh lớn, nên một file lớn vẫn có thể thất bại sau khi đã tải lên với lỗi hết bộ nhớ.
Bước 3: Tăng giới hạn đúng chỗ cho hosting của bạn
| Môi trường của bạn | Đặt ở đâu | Ghi chú |
|---|---|---|
| VPS hoặc máy chủ riêng | File php.ini mà PHP thực sự nạp | Khởi động lại PHP-FPM hoặc Apache sau đó |
| Shared hosting dùng PHP-FPM hoặc FastCGI | .user.ini trong thư mục gốc WordPress | Có thể mất tới 5 phút mới áp dụng |
| Apache chạy PHP dạng module (mod_php) | .htaccess với php_value | Gây lỗi 500 khi chạy PHP-FPM hoặc FastCGI |
| Hosting cPanel | Software > MultiPHP INI Editor | Tự ghi php.ini, .user.ini hoặc .htaccess cho bạn |
| Nginx đứng trước PHP | client_max_body_size cùng với các giá trị PHP | Nếu không, Nginx trả về 413 |
| Hosting WordPress được quản lý | Bảng điều khiển hoặc bộ phận hỗ trợ của hosting | Nhiều hosting giới hạn upload ở cấp nền tảng |
| Trang chạy sau Cloudflare | Giới hạn upload riêng của Cloudflare | 100 MB ở gói Free và Pro |
php.ini (máy chủ bạn tự quản lý)
Trước tiên hãy tìm file đang được nạp. Tạo một file tạm chứa <?php phpinfo();, mở nó trên trình duyệt, đọc dòng “Loaded Configuration File”, rồi xóa file đó. Sửa file php.ini này:
upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 300
Sau đó khởi động lại PHP để nó đọc thay đổi. Với PHP-FPM, tên dịch vụ có kèm phiên bản, ví dụ sudo systemctl restart php8.3-fpm trên Debian hoặc Ubuntu. Với mod_php, hãy khởi động lại Apache.
.user.ini (phần lớn shared hosting)
PHP chỉ đọc file .user.ini khi chạy dưới dạng CGI hoặc FastCGI, bao gồm cả PHP-FPM. Tạo hoặc sửa .user.ini trong thư mục chứa wp-config.php:
upload_max_filesize = 128M
post_max_size = 130M
PHP đọc lại các file này sau mỗi user_ini.cache_ttl giây, mặc định là 300. Hãy đợi năm phút trước khi kết luận là không hiệu quả, hoặc khởi động lại PHP-FPM nếu bạn có thể.
.htaccess (chỉ Apache với mod_php)
php_value upload_max_filesize 128M
php_value post_max_size 130M
Tài liệu PHP mô tả các chỉ thị này cho PHP chạy dưới dạng module Apache. Nếu trang báo 500 Internal Server Error ngay sau khi bạn lưu, nghĩa là PHP đang chạy dạng FastCGI hoặc PHP-FPM. Hãy xóa các dòng đó và dùng .user.ini thay thế.
cPanel MultiPHP INI Editor
Trong cPanel, mở Software > MultiPHP INI Editor, chọn tên miền và đổi giá trị trong Basic Mode. Theo tài liệu của cPanel, Basic Mode lưu vào các file php.ini, .user.ini và .htaccess ở nơi mỗi file hỗ trợ thiết lập đó, nên bạn không cần biết máy chủ dùng file nào.
Nginx
Nginx kiểm tra kích thước yêu cầu trước khi PHP nhìn thấy nó. Khi yêu cầu lớn hơn client_max_body_size, Nginx trả về 413 Request Entity Too Large. Mặc định là 1m. Thêm một giá trị ít nhất bằng post_max_size vào khối server:
client_max_body_size 130M;
Kiểm tra và tải lại bằng sudo nginx -t && sudo systemctl reload nginx. Trên Apache, thiết lập tương tự là LimitRequestBody, hiếm khi cần đổi trên hosting WordPress thông thường.
Hosting được quản lý và Cloudflare
Một số hosting WordPress được quản lý bỏ qua php.ini hoặc .user.ini của bạn và đặt giới hạn cho cả nền tảng. Nếu Tình trạng trang web vẫn hiện con số cũ sau khi bạn thay đổi, hãy hỏi hosting mức tối đa là bao nhiêu và họ có thể tăng không.
Nếu trang chạy qua Cloudflare, Cloudflare có giới hạn riêng. Tài liệu bộ nhớ đệm của họ ghi dung lượng upload tối đa là 100 MB ở gói Free và Pro, 200 MB ở Business và tới 5 GB ở Enterprise. Không thiết lập PHP nào vượt qua được giới hạn này.
Vì sao wp-config.php không có tác dụng
Nhiều bài viết khuyên thêm đoạn này vào wp-config.php:
@ini_set( 'upload_max_filesize', '128M' );
@ini_set( 'post_max_size', '130M' );
Cả hai thiết lập đều là INI_PERDIR, và tài liệu PHP nói thiết lập thuộc chế độ này không thể đặt bằng ini_set(). Dấu @ che đi lỗi, nên các dòng này trông vô hại nhưng không đổi gì cả. Thứ wp-config.php đổi được là bộ nhớ, vì memory_limit đặt được ở bất cứ đâu:
define( 'WP_MEMORY_LIMIT', '256M' );
Điều đó giúp khi ảnh lớn bị lỗi trong lúc xử lý. Nó không thay đổi dung lượng file tải lên tối đa.
Bước 4: Xác nhận thay đổi
Tải lại Media > Thêm mới và kiểm tra dung lượng file tải lên tối đa đã hiện giá trị mới chưa. Nếu chưa:
- Kiểm tra
post_max_sizeít nhất bằngupload_max_filesize. WordPress dùng giá trị nhỏ hơn. - Xác nhận bạn đã sửa đúng file PHP thực sự nạp. Một
php.ininằm sai thư mục sẽ bị bỏ qua. - Đợi năm phút với thay đổi trong
.user.ini, hoặc khởi động lại PHP-FPM. - Nếu con số trong WordPress đã đổi mà upload vẫn lỗi 413, thứ chặn nằm ở Nginx, proxy của hosting hoặc Cloudflare.
- Nếu file đã tới WordPress rồi mới báo “HTTP error”, dung lượng không còn là vấn đề. Hướng dẫn về lỗi HTTP khi tải ảnh lên WordPress của chúng tôi trình bày các nguyên nhân thường gặp.
Nên đặt cao bao nhiêu?
Hãy đặt theo file lớn nhất bạn thực sự cần tải lên, cộng thêm một chút dư, và giữ post_max_size cao hơn upload_max_filesize một chút. File lớn cũng tải lâu hơn, nên hãy tăng max_execution_time nếu file lớn bị hết thời gian chờ trên kết nối chậm. Với file rất lớn như video dài hoặc bản sao lưu, tải lên qua SFTP hoặc plugin upload chia nhỏ thường đáng tin cậy hơn một lần tải khổng lồ qua trình duyệt, và giới hạn gói Cloudflare có khi đã loại trừ cách dùng trình duyệt rồi.
Khi đã biết mục tiêu, công cụ dung lượng upload tối đa sẽ viết sẵn các dòng PHP khớp nhau cho bạn. Nếu máy chủ chạy Nginx, hãy tự thêm dòng Nginx trong hướng dẫn này.
FAQ
Câu hỏi
Làm sao kiểm tra giới hạn upload hiện tại trong WordPress?
Vào Media > Thêm mới. Màn hình tải lên hiển thị dung lượng file tải lên tối đa. Để xem chi tiết, mở Công cụ > Tình trạng trang web > Thông tin và mở phần Xử lý media, nơi liệt kê dung lượng tối đa của file tải lên, dung lượng tối đa của dữ liệu POST, và dung lượng file hiệu dụng tối đa, tức giá trị nhỏ hơn trong hai giá trị đó.
Vì sao WordPress báo file tải lên vượt quá chỉ thị upload_max_filesize trong php.ini?
File lớn hơn thiết lập upload_max_filesize của PHP. WordPress không đặt giới hạn này mà đọc nó từ PHP. Hãy tăng upload_max_filesize và post_max_size cùng lúc trong php.ini, .user.ini, hoặc .htaccess nếu là Apache chạy mod_php. Giá trị mặc định của chính PHP cho upload_max_filesize chỉ là 2M, dù phần lớn hosting đặt cao hơn.
Có thể tăng giới hạn upload từ wp-config.php không?
Không. upload_max_filesize và post_max_size là thiết lập PHP_INI_PERDIR, PHP chỉ nhận chúng từ php.ini, .htaccess, httpd.conf hoặc .user.ini. Một dòng ini_set() trong wp-config.php chạy không báo lỗi nhưng không thay đổi gì. wp-config.php có thể tăng giới hạn bộ nhớ của WordPress, nhưng bộ nhớ không phải thứ giới hạn dung lượng file.
Vì sao tôi vẫn gặp 413 Request Entity Too Large sau khi đã tăng giới hạn PHP?
Có thứ gì đó đứng trước PHP đang từ chối yêu cầu. Trên Nginx đó là client_max_body_size, mặc định 1m và trả về lỗi 413 khi bị vượt. Hãy tăng nó trong khối server rồi tải lại Nginx. Nếu trang chạy qua Cloudflare, giới hạn dung lượng upload theo gói của Cloudflare cũng có thể chặn yêu cầu trước khi nó tới máy chủ của bạn.
post_max_size có cần lớn hơn upload_max_filesize không?
Nó nên ít nhất bằng, và lớn hơn một chút thì an toàn hơn. File được gửi trong một yêu cầu POST cùng các dữ liệu form khác, nên toàn bộ yêu cầu được tính vào post_max_size. WordPress dùng giá trị nhỏ hơn trong hai giá trị làm giới hạn upload, nên chỉ tăng upload_max_filesize sẽ giữ giới hạn y như cũ.