post_max_size 必须大于 upload_max_filesize,因其限制整个POST请求体(含表单字段、boundary、文件头等),而后者仅限单个文件;例如设 upload_max_filesize=100M 时,post_max_size 应设为105M并同步调整 memory_limit 和 Nginx 的 client_max_body_size,且需重启 PHP-FPM 生效。

post_max_size 必须比 upload_max_filesize 大,是因为它管的是整个 POST 请求体的总大小,而 upload_max_filesize 只管单个上传文件的大小上限。
你提交一个带文件的表单时,HTTP 请求体不只有文件内容,还包括:
- 表单其他字段(如 text、textarea、hidden 等)
- multipart/form-data 的边界分隔符(boundary)
- 文件头信息(Content-Disposition、Content-Type 等)
- 多个文件之间的分隔开销
这些加起来,实际请求体体积一定会大于单个文件本身。
例如:
你设 upload_max_filesize = 100M,准备上传一个 99.8M 的文件。
但加上表单字段和协议头后,整个 POST 数据可能达到 100.5M —— 如果 post_max_size 还是默认的 8M 或只设成 100M,PHP 就会在解析请求时直接截断或报错(常见错误码 UPLOAD_ERR_INI_SIZE)。
所以合理设置应满足:
- upload_max_filesize = 100M
- post_max_size = 105M(预留 5M 左右缓冲)
- memory_limit ≥ post_max_size × 1.2(比如设为 128M 或 256M,避免解析阶段内存溢出)
另外注意:
- 这两个参数都属于 PHP 启动时加载项,运行时用
ini_set()修改无效 - Nginx 层还有
client_max_body_size,它必须 ≥post_max_size,否则请求根本到不了 PHP - 所有修改后必须重启 PHP-FPM(小皮面板里点「重启 PHP」),不能只改配置不重载

















