宝塔面板上传大文件失败
花十分钟按下面五步走一遍,你就能搞清宝塔面板传大文件到底是卡在哪一层,并把限制数值改成你需要的大小。
第一步:先看报错,判断是哪一层拦的
这一步是为了避免瞎改参数。传大文件失败通常有四种表现,对应四个地方:
- 浏览器直接返回 413 Request Entity Too Large → Nginx 拦的,改
client_max_body_size。 - 页面提示
The uploaded file exceeds the upload_max_filesize directive→ PHP 拦的。 - 进度条走到 100% 后卡住几十秒,然后失败或 502 → 超时,改
max_execution_time。 - 在宝塔面板「文件」里上传,连进度都没有直接失败 → 这是面板自身进程的限制,别再折腾 PHP 了,直接跳到第五步。
第二步:改 PHP 的上传限制
这一步做完,PHP 才允许接收大文件。
依次点:**软件商店 → 已安装 → 找到 PHP-7.4(用你实际的版本号)→ 设置 → 配置修改**,在弹出的配置框里搜索并改成:
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 600
max_input_time = 600
memory_limit = 512M
改完点右下角「保存」,再切到同一个弹窗里的「服务」标签,点「重启」。
注意:
post_max_size必须大于等于upload_max_filesize,memory_limit建议不小于post_max_size。三个数值不匹配时,改了也照样失败。多个 PHP 版本共存时,要改的是你站点实际使用的那一个,可以在「网站 → 站点 → 设置 → 网站目录」上方看到。
第三步:改 Nginx 的请求体上限
这一步解决 413 报错。宝塔新建站点时默认写的是 client_max_body_size 50m;。
点:网站 → 点击你的站点名 → 配置文件,在 server { } 里找到那一行,把 50m 改成 512m:
client_max_body_size 512m;
如果想让所有站点都生效,就改全局:软件商店 → 已安装 → Nginx → 设置 → 配置修改,在 http { } 块里改。
注意:同一个层级里不要重复写两行
client_max_body_size,Nginx 会报directive is duplicate并拒绝启动。找到原有的那行改数值即可。
第四步:重载服务让配置生效
改完上面两处后:软件商店 → 已安装 → Nginx → 服务 → 重载配置,PHP 那边点「重启」。只点「保存」不重载,配置是不生效的。
第五步:面板「文件」里上传的替代方案
宝塔面板自带的文件管理器走的是面板 Python 进程,传几百 MB 以上的文件很容易断,不建议硬来。改用 SFTP:
下载 FileZilla,站点管理器新建站点:协议选 SFTP,主机填服务器 IP,端口 22,登录类型「正常」,用户名 root,密码为服务器密码。连接后把本地文件拖到 /www/wwwroot/你的站点目录/ 即可,支持断点续传。
小文件也可以用命令行:登录 SSH 后执行 cd /www/wwwroot/站点目录 再 rz -be 上传(需先装 lrzsz)。
注意:如果是 phpMyAdmin 导入 SQL 失败,除了上面 PHP 的
upload_max_filesize,还要改 phpMyAdmin 目录下的config.inc.php,把$cfg['UploadDir']打开,或直接用命令行mysql -u用户 -p 库名 < xxx.sql导入,最省事。
小结
- 413 是 Nginx 的事,改
client_max_body_size;PHP 报错是upload_max_filesize和post_max_size的事,两个都要改且后者不小于前者。 - 改完必须重载 Nginx、重启 PHP-FPM,否则不生效。
- 进度条 100% 后失败是超时问题,调
max_execution_time和max_input_time。 - 面板「文件」里传大文件本身不可靠,直接用 SFTP 更稳。
- 多 PHP 版本环境下,确认改的是站点实际使用的那个版本。
原文链接:https://www.gj0.com/thread-788.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。