WooCommerce File Upload Size Limits, and How to Increase Them
Why a large file fails with no useful error, how to find your real limit in under a minute, and the four settings that actually control it.
Your real limit is the lowest of four values: PHP's upload_max_filesize, PHP's post_max_size, any limit your plugin sets, and sometimes a web server rule. Find the first two in WooCommerce > Settings > Status, raise them through your host, and set the plugin's limit slightly below so customers get a clear message instead of a request that dies.
First, find your real limit
Go to WooCommerce > Settings > Status and look in the Server environment section. Two rows matter:
- PHP post max size
- Max upload size
Whichever is lower is your ceiling, no matter what any plugin says. If Max upload size reads 8 MB and your upload rule allows 50 MB, customers get 8 MB and usually an error that explains nothing.
This one check resolves most reports of "the upload is broken".
The four limits, in the order they bite
| Limit | Set by | What happens when it is hit |
|---|---|---|
upload_max_filesize | PHP | The individual file is rejected |
post_max_size | PHP | The whole request is rejected, which can empty the form |
| Plugin maximum upload size | Your upload rule | A clear message to the customer, before anything is sent |
| Web server body size | Nginx or Apache | A 413 error, often before PHP sees the request at all |
Two rules follow from this. post_max_size must be larger than upload_max_filesize, because the request carries the file plus everything else on the form. And if customers upload several files at once, post_max_size has to cover the combined total, not the largest single file.
Raising the PHP limits
On most managed hosting this is a setting in the control panel, or a support ticket. On a server you control, one of these:
php.ini
upload_max_filesize = 128M
post_max_size = 160M
memory_limit = 256M
max_execution_time = 300
.htaccess, on Apache with PHP as a module:
php_value upload_max_filesize 128M
php_value post_max_size 160M
php_value memory_limit 256M
php_value max_execution_time 300
If adding those to .htaccess produces a 500 error, your host runs PHP in a mode that does not accept them. Remove the lines and ask the host instead.
wp-config.php can raise memory but not the upload limits:
@ini_set( 'memory_limit', '256M' );
Plenty of guides suggest setting WP_MEMORY_LIMIT or upload_max_filesize here. Memory works. The upload values generally do not, because PHP has already read them before WordPress loads.
After changing anything, reload WooCommerce > Status and confirm the numbers actually moved. If they have not, the change did not take effect, and no amount of repeating it will help.
When it is the web server, not PHP
If the PHP values look right and uploads still fail, especially with a 413 error, the web server is rejecting the request first.
On Nginx, that is client_max_body_size, which defaults to 1 MB and is set in the server configuration rather than anywhere you can reach from WordPress. Your host has to change it. It is worth naming the directive when you ask, because it turns a vague ticket into a specific one.
Setting the plugin's own limit
In the upload rule, set Maximum Upload Size in KB, MB or GB, slightly below your server's real ceiling.
That gap matters. A plugin limit set below the server's produces an immediate, readable message before anything is uploaded. A plugin limit set above it produces a long wait and then a failure the customer cannot interpret, which turns into a support email or an abandoned order.
Large files that stall rather than fail
If an upload reaches 80 or 90 percent and then dies, size is probably not the problem. Likely causes:
- Execution time.
max_execution_timetoo low for a slow connection. 300 seconds is a reasonable starting point. - Memory. Image processing, such as generating previews, needs memory beyond the file size itself.
- A proxy or CDN timeout in front of your site, which has its own limits regardless of what the origin allows.
- The customer's upload speed. A 100 MB file on a typical home connection takes minutes, and a progress bar matters as much as the limit does.
How high should the limit be?
Set it from what your customers genuinely send, not from a round number.
| What customers upload | Reasonable limit |
|---|---|
| Documents, licences, purchase orders | 5 to 10 MB |
| Photos for printing | 25 to 50 MB |
| Print-ready PDFs and vector artwork | 50 to 150 MB |
| Large format, signage, banners | 150 MB and up |
Higher is not automatically better. A large ceiling invites uncompressed files that are slow to upload, slow to review and expensive to store, and if you accept only vector formats for a product, a tight limit is itself a quality filter.
- Your real limit is the lowest of four values, and WooCommerce > Status shows you the two that matter most.
post_max_sizemust exceedupload_max_filesize, and must cover all files in one submission.- A 413 error means the web server, not PHP. On Nginx that is
client_max_body_size. - Set the plugin's limit below the server's so customers get a message rather than a dead request.
- Uploads that stall near the end are usually time or memory, not size.
FAQ
What is the maximum file upload size in WooCommerce?
upload_max_filesize and post_max_size, plus any web server rule and whatever your upload plugin allows. The lowest of those wins.Where do I check my current upload limit?
How do I increase the upload size limit?
upload_max_filesize and post_max_size in php.ini, or through your host's control panel. On managed hosting it is usually a support request. Confirm the change in WooCommerce > Status afterwards.Why does my upload fail with a 413 error?
client_max_body_size, which defaults to 1 MB and can only be changed in the server configuration, so your host has to do it.Can I change the upload limit in wp-config.php?
Why does an upload stop at 90 percent?
max_execution_time and memory_limit is the first thing to try.What limit should I set for print artwork?
Set the limit, state it, and accept only what you can use
Per-rule size limits in KB, MB or GB, custom file extensions for production formats, and a description field that tells customers before they upload.
Get Customer Upload Files →
