WordPress
PHP upload limits: why large uploads fail before WordPress sees them
PHP upload limits come from several separate boundaries, not one setting. The browser, reverse proxy/web server, PHP request limits, application checks, filesystem quota, temporary directory, and post-processing step can each reject or truncate an upload.
Compare upload_max_filesize and post_max_size
PHP upload_max_filesize limits an individual uploaded file while post_max_size limits the entire request body. A multipart request needs room for form fields and overhead, so post_max_size normally needs to exceed the intended file size.
memory_limit is not identical to upload size, though applications that load the entire file into memory may still need headroom.
Check the web-server request boundary
nginx client_max_body_size, Apache directives, proxies, WAFs, and external platforms can reject the request before PHP sees it. Inspect HTTP status and server logs to locate the layer.
If a CDN/proxy is in front, its plan-level request limit may be outside server configuration entirely.
Verify temporary and destination storage
Uploads may first land in a temp directory and then move into an application directory. Check filesystem free space, inodes, quotas, ownership, permissions, and the PHP temp path.
An application can report a generic upload failure for a filesystem problem.
Prefer chunked/direct workflows for very large data
A huge single HTTP upload is fragile across browser, proxy, timeout, and application layers. Where supported, use resumable or chunked upload, or an appropriate file-transfer/storage workflow, so every web limit does not need to be raised dramatically.
- Check PHP file and request limits.
- Check proxy/web-server body limits.
- Verify temp/destination storage.
- Use resilient transfer methods for large files.