phpMyAdmin 上传失败的200MB限制实际由PHP配置决定,需修改upload_max_filesize和post_max_size等参数并通过挂载.ini文件生效,同时Apache需配置LimitRequestBody,且必须重启容器才能使新配置生效。
phpMyAdmin 上传失败报 200 MB 错误,其实是 PHP 的锅
phpmyadmin 本身不控制上传大小,它完全依赖底层 php 的配置。你看到的 200 mb 限制(或类似值),实际来自 php 的 upload_max_filesize 和 post_max_size。docker 容器里改 phpmyadmin 的环境变量(比如 php_upload_max_filesize)根本没用——官方镜像压根不读这个变量。
必须修改 PHP 配置文件,不是改环境变量
Docker 官方 phpmyadmin/phpmyadmin 镜像基于 Apache + PHP,但没提供运行时环境变量转 PHP ini 的机制。要生效,得覆盖或挂载 PHP 配置文件。
- 找到容器内 PHP 的主配置路径:
/usr/local/etc/php/conf.d/(PHP-FPM 或 CLI 模式下也适用) - 新建一个
upload.ini文件,内容为:
upload_max_filesize = 512M post_max_size = 512M max_execution_time = 600 memory_limit = 1G
- 启动容器时用
-v /path/to/upload.ini:/usr/local/etc/php/conf.d/upload.ini挂载进去 - 别动
php.ini原文件——它可能被镜像内置逻辑覆盖;用.ini后缀的额外文件更安全,PHP 会自动按字母序加载
Apache 容器还要调 LimitRequestBody
如果用的是 Apache(默认),光改 PHP 不够。Apache 本身对请求体有默认限制(通常 0,即不限),但某些定制镜像或反向代理后可能被设死。检查是否生效:
- 进容器执行
apache2ctl -M | grep rewrite确认模块加载正常 - 在挂载的 Apache 配置片段(如
/etc/apache2/conf-available/phpmyadmin.conf)里加一行:LimitRequestBody 0(0表示不限制) - 或者直接在
docker run时用-e APACHE_DOCUMENT_ROOT=/var/www/html配合自定义.htaccess(不推荐,Apache 容器默认禁用AllowOverride)
验证是否真生效,别信 phpMyAdmin 页面显示
phpMyAdmin 的首页“最大上传”数字只是前端硬编码的提示(常写死为 200 MB),和实际限制无关。真正要看:
- 进容器执行
php -i | grep -E "upload_max_filesize|post_max_size",确认输出是你设的值 - 上传一个略超原限制(如 201MB)的 SQL 文件,看报错是 PHP 的
413 Request Entity Too Large还是 Apache 的400 Bad Request——前者说明 PHP 生效了,后者说明 Apache 层卡住了 - 注意:MySQL 服务端也有
max_allowed_packet限制,大 SQL 导入失败可能卡在这儿,和上传无关
改完 PHP ini 后必须重启容器,docker exec 里改完文件不重启等于白改。这点最容易被忽略——以为 reload Apache 就行,其实 PHP 进程得重起才读新 ini。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











