应调大 upload_max_filesize 和 post_max_size(后者需≥前者),并同步调整 max_input_time、client_max_body_size 及 upload_tmp_dir 权限,修改后重启 php 服务并验证生效。

上传失败提示 413 Request Entity Too Large 怎么办
这不是 Nginx 拦的,就是 PHP 层没接住——post_max_size 或 upload_max_filesize 太小了。宝塔默认值通常是 2M,超过就直接拒收,连错误日志都未必写全。
-
upload_max_filesize控制单个文件上限(比如你传一个 50MB 的 zip) -
post_max_size必须 ≥upload_max_filesize,否则整个 POST 请求会被截断(常见坑:改了前者却忘了后者) - 改完必须重启 PHP 服务,不是重载 Nginx,也不是点“重载配置”就行
- 如果用的是 PHP-FPM 模式,确认改的是对应版本的
php.ini,路径通常是/www/server/php/{版本号}/etc/php.ini
宝塔后台改了没生效?检查三个位置
宝塔面板的「PHP 设置」页只是快捷入口,它背后操作的是指定路径的 php.ini,但可能被其他配置覆盖:
- 优先级最高的是用户项目根目录下的
.user.ini(尤其 Laravel、ThinkPHP 项目常自带),里面如果有upload_max_filesize,会覆盖全局php.ini - 某些环境还加载了
php.d/*.ini下的额外配置,比如宝塔的zzz-phpinfo.ini,得一并检查 - 执行
php --ini和php -r "echo ini_get('upload_max_filesize');"确认当前生效值,别只信面板显示
大文件上传还要调 max_execution_time 和 max_input_time
上传几百 MB 文件时,PHP 默认 30 秒超时根本不够用,尤其在低带宽或高延迟环境下:
-
max_execution_time影响上传后脚本处理时间,一般不用动;但max_input_time是关键——它控制整个请求(含上传)的数据接收时限,默认 -1 或 60,建议设为300(5 分钟)以上 - 如果用
nginx,还得同步调client_max_body_size(单位是100m这种,不是100M),否则请求在进 PHP 前就被 Nginx 拒了 - 宝塔里这个值在网站 → 设置 → 配置文件 → “请求体大小限制”里改,别只改 PHP
改完还是 0 字节?查 error_log 和临时目录权限
上传成功但 $_FILES 为空,或者 move_uploaded_file() 失败,大概率是底层卡住了:
- 看 PHP 错误日志(
/www/wwwlogs/php_error.log),搜upload或tmp,常出现Unable to open temporary file - 检查
upload_tmp_dir指向的路径是否存在、可写,且磁盘空间充足(默认是/tmp,但有些系统会自动清理) - 如果用了 Docker 或低权限用户部署,
www用户可能没权限写入系统/tmp,建议显式设成/www/wwwroot/your-site/tmp并chown www:www
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











