Bỏ qua tới nội dung
Cấu hình

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.

Đã đăng Cập nhật

Để 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.
Màn hình Upload Media của WordPress với dòng Maximum upload file size: 2 GB bên dưới vùng tải lên
Vị trí giới hạn hiển thị trên màn hình tải lên, bên dưới vùng tải lên. 2 GB là giá trị của server thử nghiệm; nhiều nhà cung cấp hosting đặt thấp hơn nhiều.
Site Health Info của WordPress, mục Media Handling, liệt kê max size of post data allowed, max size of an uploaded file và max effective file size
Tools > Site Health > Info > Media Handling trên site thử nghiệm, với giới hạn post data, file tải lên và giới hạn hiệu dụng nằm ở các hàng riêng.

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ậpGiới hạn điều gìMặc định của PHPĐổi được ở đâu
upload_max_filesizeFile tải lên đơn lẻ lớn nhất2Mphp.ini, .user.ini, .htaccess, httpd.conf
post_max_sizeToàn bộ yêu cầu POST, gồm cả file8Mphp.ini, .user.ini, .htaccess, httpd.conf
memory_limitBộ nhớ PHP được dùng khi chạy128MỞ bất cứ đâu, kể cả wp-config.php
max_execution_timeSố giây một script được chạy30Ở 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ận1mChỉ 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 ở đâuGhi chú
VPS hoặc máy chủ riêngFile php.ini mà PHP thực sự nạpKhở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 WordPressCó 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_valueGây lỗi 500 khi chạy PHP-FPM hoặc FastCGI
Hosting cPanelSoftware > MultiPHP INI EditorTự ghi php.ini, .user.ini hoặc .htaccess cho bạn
Nginx đứng trước PHPclient_max_body_size cùng với các giá trị PHPNế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 hostingNhiều hosting giới hạn upload ở cấp nền tảng
Trang chạy sau CloudflareGiới hạn upload riêng của Cloudflare100 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ằng upload_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.ini nằ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ũ.