phpenv上传大文件失败主因是nginx的client_max_body_size未配置或与php的upload_max_filesize、post_max_size不匹配,需同步修改nginx.conf和php.ini并重启服务。

phpEnv 环境下上传大文件失败,90% 是因为 client_max_body_size 没配,或者只改了 PHP 侧却漏了 Nginx 侧。它和 upload_max_filesize 不是同一个东西,缺一不可。
phpEnv 的 Nginx 配置在哪改 client_max_body_size
phpEnv 默认把 Nginx 配置放在 C:\phpEnv\nginx\conf\nginx.conf 或站点专属配置里(如 C:\phpEnv\nginx\vhost\your-site.conf)。别去改 php.ini 里的 upload_max_filesize 就以为万事大吉——Nginx 在请求到达 PHP 前就拦下了。
- 打开对应配置文件,在
http块、server块或具体location ~ \.php$块里加一行:client_max_body_size 128M; - 如果多个站点共用一个
http块,统一设在这里最省事;如果只想放开某个站点,优先写在它的server块内 - 值建议比 PHP 的
upload_max_filesize大 10–20%,比如 PHP 设了64M,Nginx 这里设72M更稳妥
同时必须同步修改 php.ini 的 upload_max_filesize 和 post_max_size
upload_max_filesize 控制单个文件上限,post_max_size 控制整个 POST 请求体(含多文件、表单字段等)的总大小。两者都得调,且 post_max_size 必须 ≥ upload_max_filesize,否则哪怕文件没超,整个请求也会被 PHP 拒掉。
- 找到 phpEnv 对应 PHP 版本的
php.ini(路径类似C:\phpEnv\php\php-8.1\php.ini) - 搜索并修改:
upload_max_filesize = 64M、post_max_size = 72M - 改完别忘了重启 phpEnv 的 Nginx 和 PHP-FPM 服务(面板里点“重启所有服务”,或手动执行
nginx -s reload+ 重启 PHP-FPM 进程)
验证是否生效:别只看 phpinfo()
phpinfo() 只能确认 upload_max_filesize 和 post_max_size 生效了,但无法反映 Nginx 的 client_max_body_size。真正要验证,得触发真实上传并观察错误码:
- 上传一个略大于原限制(比如原为 2M,传 3M 文件),如果返回
413 Request Entity Too Large,说明 Nginx 拦截了 →client_max_body_size没生效或设小了 - 如果返回
UPLOAD_ERR_INI_SIZE或页面提示“文件超出允许大小”,说明 PHP 层限制未通过 → 检查php.ini和服务是否重启 - 上传成功后,可在脚本里用
$_FILES['xxx']['error'] === 0和$_FILES['xxx']['size']核对实际接收尺寸
最容易忽略的是:phpEnv 启动时可能缓存旧配置,改完不重启等于白改;另外某些 Windows 杀毒软件会拦截大文件上传过程,表现为无错误但卡在 0%,这种要单独排查。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











