phpMyAdmin不支持导入.sql.gz文件,因其导入流程依赖PHP的$_FILES机制且不处理gzip解压,任何PHP版本均无法识别.gz文件;唯一可靠方式是命令行执行gunzipphpMyAdmin导出的.sql.gz文件根本就不能被phpMyAdmin导入——不是“在 PHP 8.0 下无法导入”,而是**任何 PHP 版本下都不支持**。它压根不处理 gzip 解压逻辑,上传阶段就失败。phpMyAdmin 界面根本不识别 .gz 文件
你点“选择文件”时看不到
.sql.gz,或者选中后上传按钮灰掉、进度条卡死、跳转到空白页——这不是 php 8.0 的 bug,是功能缺失。原因很直接:phpmyadmin的导入流程完全依赖 php 的$_files机制和move_uploaded_file(),它只接收原始 http post 上传的二进制流,不做任何解压。浏览器传过来的是 gzip 压缩流,php 就当它是乱码 sql,后续解析直接崩。为什么改 php.ini 也救不了 .gz 上传
即使你把
upload_max_filesize、post_max_size调到 2G,phpMyAdmin依然拒绝.sql.gz:
upload_max_filesize限制的是上传文件体积,但phpMyAdmin在 MIME 类型校验阶段就过滤掉了application/gzip或application/x-gzip- 就算绕过 MIME 检查(比如手动改后缀为
.sql),PHP 接收到的仍是压缩字节流,mysql客户端执行时会报MySQL server has gone away或解析错误- PHP 8.0 对
$_FILES的类型校验更严格,反而让这类“伪绕过”更容易失败真正能用的导入方式只有两种
别折腾界面了,直接上命令行(Linux/macOS/WSL):
- 确保服务器上已安装
gunzip和mysql客户端- 把
backup.sql.gz传到服务器(scp、rsync或 FTP)- 执行:
gunzip- 如果数据库有密码,
-p会交互提示;也可用-p'yourpass'(注意无空格),但不推荐明文写密码这个命令不走 PHP 上传流程,不受
upload_max_filesize、memory_limit或max_execution_time限制,解压+导入全程流式处理,快且稳。想在 phpMyAdmin 里“假装”支持 .gz?不行,但可以换招
有人试过前端 JS 解压再提交——浏览器根本读不到原始 gzip header,大文件直接 OOM 卡死;也有人想改
phpMyAdmin源码加gzdecode()——PHP 8.0 已废弃gzopen()的部分用法,且要重写整个导入器,维护成本远超收益。唯一现实的“界面替代方案”是启用
$cfg['UploadDir'] = 'upload';:把.sql.gz先用 FTP 传到服务器phpMyAdmin/upload/目录,再在 phpMyAdmin 导入页选择“从服务器上传目录导入”,但它仍只认.sql,所以你得先在服务器上手动gunzip *.sql.gz——这一步绕不开,只是把解压动作从本地挪到了服务端。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











