phpmyadmin上传sql文件卡在“文件过大”是因为php的upload_max_filesize和post_max_size限制,且post_max_size必须大于upload_max_filesize;修改后需重启服务并确认生效路径,nginx/apache等web服务器也可能拦截大请求。
phpmyadmin 本身不控制上传大小,真正起作用的是 php 的配置项 upload_max_filesize 和 post_max_size;改错地方会导致反复刷新页面却无效果。
为什么 phpMyAdmin 上传 SQL 文件总卡在“文件过大”?
常见现象是:选择大 SQL 文件后点击「执行」,页面没反应、跳回空导入页,或提示 The uploaded file exceeds the upload_max_filesize directive in php.ini。这不是 phpMyAdmin 界面设置能解决的——它只是个前端,背后依赖 PHP 的上传机制。
关键点:
- PHP 必须同时满足两个限制:
upload_max_filesize(单文件上限) ≤post_max_size(整个 POST 请求上限),否则即使文件没超,也会被截断 - phpMyAdmin 的
$cfg['UploadDir']配置仅用于「从服务器本地目录导入」,和浏览器上传无关 - Web 服务器(如 Nginx/Apache)也可能有额外限制,需同步检查
修改 php.ini 中的上传限制(最常用场景)
找到你实际生效的 php.ini 文件(可通过 phpinfo() 页面确认路径),修改以下两项:
upload_max_filesize = 128M post_max_size = 140M
注意:
- 数值单位必须用
M(不是MB),128M表示 128 兆字节 -
post_max_size必须大于upload_max_filesize,因为 POST 数据包含表单字段+文件头等额外开销 - 改完后必须重启 PHP-FPM 或 Web 服务器(
sudo systemctl restart php-fpm或sudo systemctl restart apache2) - 如果用的是容器(如 Docker),要确保修改的是容器内运行时的
php.ini,不是宿主机的
Nginx 或 Apache 还可能拦截大请求
即使 PHP 层放开,Web 服务器也可能在入口就拒绝大请求:
- Nginx:检查
client_max_body_size,需在http、server或location块中设为至少跟post_max_size一致,例如:client_max_body_size 150M; - Apache:若启用了
mod_security,检查SecRequestBodyLimit;否则默认不限制,但某些发行版预设了低值 - 验证是否生效:上传一个略大于原限制(如 5M)的测试文件,看报错是来自 PHP 还是 Nginx(如
413 Request Entity Too Large就是 Nginx 拦的)
上传后执行失败?别只盯大小限制
文件成功上传不等于能执行成功。大 SQL 文件常因其他 PHP 设置失败:
-
max_execution_time:默认 30 秒,导入百万行可能超时 → 建议临时调高到300或设为0(不限制) -
memory_limit:phpMyAdmin 加载并解析 SQL 内容时会吃内存 →256M起步,500MB+ SQL 文件建议512M - SQL 文件本身含
CREATE DATABASE或权限语句?phpMyAdmin 默认禁止执行这些,需在配置中启用$cfg['AllowUserDropDatabase']等,但这属于权限策略问题,和大小无关
真正麻烦的往往是嵌套逻辑:改了 upload_max_filesize 却忘了 post_max_size,或者调高了 PHP 限制但 Nginx 仍卡着,最后以为是 phpMyAdmin Bug。动手前先用 phpinfo() 确认当前生效值,比盲目改配置高效得多。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











