多文件上传异常:15个input单文件正常,多文件仅前10个生效
解决多文件上传仅显示前10个输入框图片的问题
这个问题我之前帮朋友排查过,大概率是PHP的max_file_uploads配置限制了总上传文件数!
问题原因分析
你有15个支持多文件的上传输入框,当每个传2张图时,总文件数是15×2=30个。而PHP默认的max_file_uploads配置值是20——这意味着一次请求最多只能处理20个上传文件。所以前10个输入框刚好凑够20个文件,后面的5个输入框的文件直接被PHP丢弃了,自然就显示不出来。
你之前调整的upload_max_filesize和post_max_size只是控制单个文件大小和POST请求总大小,和文件数量限制没关系哦。
解决步骤
- 修改php.ini配置
找到你的PHP配置文件(php.ini),找到max_file_uploads这一行,把值改成至少30(或者更大,比如40,留些冗余空间):max_file_uploads = 30 - 重启Web服务
修改完配置后,必须重启你的Web服务器(Apache、Nginx或者PHP-FPM,根据你的运行环境来),否则配置不会生效。 - 验证配置是否生效
可以创建一个php文件,内容如下:
访问这个文件,搜索<?php phpinfo(); ?>max_file_uploads,确认数值已经更新为你设置的30或更大。
额外注意事项
- 如果是共享虚拟主机,你可能没有权限直接修改php.ini,这时候可以尝试使用
.user.ini文件(部分主机支持),把max_file_uploads = 30写入这个文件放到网站根目录,或者联系主机服务商帮忙调整。 - 确保
post_max_size的数值足够大,至少要大于upload_max_filesize × 总文件数,避免因为POST请求总数据量过大被截断。
内容的提问来源于stack exchange,提问作者Peter Ordonez




