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.
Related DotMoose serviceExplore DotMoose WordPress hosting

Keep reading

Related guides.

More wordpress →