post_max_size 必须大于 upload_max_filesize,因为前者限制整个post请求体大小,后者仅限单个文件;示例为upload_max_filesize=50m、post_max_size=55m;还需确保memory_limit≥post_max_size且重启服务生效。

post_max_size 必须大于 upload_max_filesize,这是 PHP 文件上传能成功的基本前提,和 PHP 版本无关——包括 PHP 8.6。
原因很直接:
上传文件是通过 POST 请求发送的,整个请求体(multipart/form-data)不仅包含文件二进制数据,还包括表单字段、边界分隔符(boundary)、头信息等额外内容。upload_max_filesize 只管单个文件大小上限;而 post_max_size 管的是整个 POST 请求体的总大小。
所以:
-
✅ 合理设置示例(单位不区分大小写,但建议统一用
M):-
upload_max_filesize = 50M -
post_max_size = 55M或60M(留出 5–10MB 缓冲)
-
-
❌ 错误设置(即使 upload 设得再大也无效):
-
upload_max_filesize = 100M -
post_max_size = 8M→ 上传任何超过 8MB 的请求都会被截断,$_FILES和$_POST全为空,错误码常为UPLOAD_ERR_NO_FILE或静默失败
-
额外注意三点:
-
memory_limit也要 ≥post_max_size(建议至少大 20%),否则解析 POST 数据时会因内存不足崩溃,报Allowed memory size exhausted - 这两个配置都属于
PHP_INI_PERDIR级别,不能用ini_set()运行时修改,必须改php.ini或.htaccess(Apache 环境) - 修改后必须重启 PHP-FPM(如
systemctl restart php8.6-fpm)或 Web 服务器(如 Apache/Nginx),否则不生效
用 phpinfo() 页面确认最终生效值,别只看配置文件内容。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











