phpMyAdmin上传失败“No data was received”是因Nginx的client_max_body_size和PHP的upload_max_filesize、post_max_size限制共同导致,需同步调整并重启对应服务。
phpMyAdmin 上传失败显示 “No data was received to import”
这是 nginx 或 php 层面限制了请求体大小,和 phpmyadmin 本身无关。实际是 nginx 拦在最外层,根本没把大请求转发给 php,所以 phpmyadmin 连日志都不会打。
-
client_max_body_size必须在 Nginx 的http、server或location块中显式设置(推荐写在server块),否则默认仅 1MB - 如果用
location /phpmyadmin反向代理或别名配置,client_max_body_size必须放在此location块内才生效 - 改完要
nginx -t && nginx -s reload,只重启 PHP-FPM 不起作用
PHP 的 upload_max_filesize 和 post_max_size 要配平
这两个值不是“越大越好”,而是必须满足:post_max_size ≥ upload_max_filesize,且都得大于你要传的文件。常见错误是只调大 upload_max_filesize,忘了 post_max_size 卡着脖子。
-
upload_max_filesize控制单个文件上限(如200M) -
post_max_size控制整个 POST 请求体总大小(含表单字段+所有文件,建议设为205M或更高) - 修改位置:通常是
/etc/php/*/fpm/php.ini(FPM 模式)或/etc/php/*/apache2/php.ini(Apache 模式),改完必须重启php-fpm服务 - 验证是否生效:访问 phpMyAdmin 的“导入”页,底部会显示当前限制,或临时建个
info.php输出ini_get('upload_max_filesize')
phpMyAdmin 自身的 $cfg['UploadDir'] 不影响 Web 上传
这个配置项只启用“从服务器本地目录选择 SQL 文件导入”的功能,和浏览器上传完全无关。很多人搜到它就去配,结果发现上传还是卡在 2MB —— 因为根本没走这条路。
- 浏览器上传走的是标准
multipart/form-dataPOST,受 Nginx + PHP 限制 -
$cfg['UploadDir']是可选增强功能,需手动把 SQL 文件先scp到服务器指定路径,再在 phpMyAdmin 界面下拉选择 - 启用它还要确保 PHP 进程有读取该目录的权限,且
$cfg['SaveDir'](导出目录)权限同理
超时问题常被忽略:Nginx 的 fastcgi_read_timeout 和 PHP 的 max_execution_time
传一个 500MB 文件,即使大小通得过,也可能在传输中途被断连——Nginx 默认 60 秒收不到完整 body 就关连接,PHP 也可能因脚本执行超时终止。
- Nginx 中加:
fastcgi_read_timeout 300(单位秒,在location ~ \.php$块里) - PHP 中调:
max_execution_time = 300、max_input_time = 300(同样在php.ini) - 注意:
max_input_time控制 PHP 解析输入数据(包括上传)的最长时间,不设够也会中断 - 这些值不宜无限制放大,生产环境建议按最大预期文件估算后加 20% 余量即可
真正麻烦的不是改哪几行,而是每层超时和大小限制像套娃:Nginx 拦一次,PHP-FPM 拦一次,PHP 脚本再拦一次。漏掉任意一层,现象都是“无声失败”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











