根本原因是PHP的post_max_size、max_execution_time、max_input_time及Web服务器(Nginx的client_max_body_size或Apache的LimitRequestBody)未同步调大。需在宝塔中同步修改PHP三项参数并重启PHP,Nginx在server块添加client_max_body_size,Apache调整LimitRequestBody,再查错误日志定位具体问题。

宝塔面板里改了 upload_max_filesize 还是传不上大文件,根本原因不是它没生效,而是 PHP 的其他两个参数和 Nginx/Apache 的请求体限制同时卡住了你。
PHP 三个上传参数必须同步调大
只改 upload_max_filesize 是无效的——它只管单个文件大小,但 PHP 还要校验整个 POST 请求的总容量和脚本最大执行时间:
-
upload_max_filesize:单个文件上限(如200M) -
post_max_size:整个 POST 请求体上限,**必须 ≥upload_max_filesize**(例如设成200M或256M) -
max_execution_time和max_input_time:上传超时容易被忽略,大文件建议设为300(秒)或更高
在宝塔中:网站 → 设置 → PHP 版本 → 配置修改,找到这三项,一起改完记得重启 PHP。
Web 服务器层也得放开(Nginx 最常见)
Nginx 默认 client_max_body_size 是 1MB,哪怕 PHP 全放开,请求在进 PHP 前就被 413 Request Entity Too Large 拦下了。
立即学习“PHP免费学习笔记(深入)”;
- 宝塔中:网站 → 设置 → 配置文件,在
server块里加一行:client_max_body_size 200M; - 注意位置:必须放在
server { ... }内,不能写在http或location里(除非你明确想局部控制) - 改完点「保存」,宝塔会自动重载 Nginx,不用手动执行
nginx -t(但如果你手改过配置,建议检查下语法)
Apache 用户别漏掉 LimitRequestBody
Apache 不走 client_max_body_size,它用的是 LimitRequestBody,且默认是 0(无限制),但某些宝塔模板会显式设成小值:
- 检查网站配置文件中是否有
LimitRequestBody行,比如LimitRequestBody 1048576(即 1MB) - 把它改成
LimitRequestBody 209715200(200MB)或直接删掉(0 表示不限) - 改完需重启 Apache,宝塔界面点「重载配置」有时不生效,建议用终端执行
systemctl restart httpd
上传失败时先看日志,别猜
上传失败不报具体错误?立刻查两处日志:
- Nginx 错误日志:
/www/wwwlogs/你的域名.error.log,搜413或client intended to send too large body - PHP 错误日志:
/www/wwwlogs/php_error.log或对应网站的 PHP 日志路径,搜upload_max_filesize或POST Content-Length
如果日志里出现 failed to open stream: No space left on device,说明磁盘临时目录(upload_tmp_dir)满了或权限不对——这时要检查 /tmp 或宝塔设置的自定义临时路径。



















