必须挂载自定义 upload.ini 文件,因官方镜像不解析 PHP_UPLOAD_MAX_FILESIZE 等环境变量;需将 upload.ini 放入 /usr/local/etc/php/conf.d/ 并设置 upload_max_filesize、post_max_size 等值,同时 Apache 配置中添加 LimitRequestBody 0。
为什么改环境变量完全没用
你设的 php_upload_max_filesize=512m 在官方镜像 phpmyadmin/phpmyadmin 里不会生效——它压根不解析这类环境变量。镜像基于 apache + php 静态构建,没有环境变量转 ini 的逻辑。执行 php -i 查不到你设的值,说明根本没加载。
必须挂载自定义 upload.ini 文件
PHP 只认 /usr/local/etc/php/conf.d/ 下以 .ini 结尾的配置文件(按字母序加载),这是最安全的方式,避免被镜像更新覆盖原 php.ini。
- 新建本地文件
upload.ini,内容如下:
upload_max_filesize = 512M post_max_size = 512M max_execution_time = 600 max_input_time = 600 memory_limit = 1G
- 启动容器时用
-v挂载:docker run -v /path/to/upload.ini:/usr/local/etc/php/conf.d/upload.ini phpmyadmin/phpmyadmin - 验证是否生效:进容器执行
php -i | grep -E "upload_max_filesize|post_max_size",输出应是你设的值
Apache 层还要加 LimitRequestBody 0
即使 PHP 配置对了,Apache 默认可能拦截大请求体,报 400 Bad Request 而不是 PHP 的 413。这不是 bug,是 Apache 的默认防护行为。
- 检查 Apache 是否启用 rewrite 模块:
apache2ctl -M | grep rewrite(部分配置依赖它) - 在挂载的 Apache 配置片段(如
/etc/apache2/conf-available/phpmyadmin.conf)末尾加一行:LimitRequestBody 0 - 别用
.htaccess:官方镜像默认禁用AllowOverride,该文件不会被读取
别信页面上写的“200 MB”
phpMyAdmin 导入页右上角显示的“最大上传:200 MB”是前端 JS 硬编码的字符串,和后端实际限制无关。它既不读 PHP 配置,也不做校验。
- 真实限制只由
upload_max_filesize和post_max_size中较小值决定 - MySQL 服务端也有
max_allowed_packet限制,大 SQL 导入失败可能卡在这儿,和上传环节无关 - 最终验证方式只有一个:上传一个略超旧限制(比如 201MB)的 SQL 文件,看报错类型
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











