max_file_uploads 限制单次请求上传文件总数,默认20,超限则静默截断$_FILES;需修改php.ini或.user.ini并重启服务(后者有缓存延迟),再通过count($_FILES'files')验证。

PHP 中 max_file_uploads 限制的是单次请求中允许上传的文件总数(不是大小),默认值通常为 20。若表单提交时含多个 <input type="file" multiple> 或多个独立 file 字段,超出该值会导致部分文件被静默丢弃,且 PHP 不报错,仅 $_FILES 数组长度被截断——这是常见上传失败却查不出原因的关键点。
确认当前 max_file_uploads 值
在 PHP 脚本中加入以下代码快速查看实际生效值:
<?php
echo 'max_file_uploads = ' . ini_get('max_file_uploads') . '<br>';
print_r($_FILES);
?>
注意:该值由 php.ini 主配置决定,.htaccess 和 ini_set() 无法修改(运行时只读)。
修改 php.ini 配置(推荐方式)
找到你项目实际使用的 php.ini 文件(可通过 phpinfo() 页面的 “Loaded Configuration File” 行确认路径),用文本编辑器打开,搜索并修改:
立即学习“PHP免费学习笔记(深入)”;
- 定位到
max_file_uploads行,取消注释(删掉前面的分号),设为所需值,例如:
max_file_uploads = 100
- 保存后,必须重启 Web 服务器(如 Apache:`sudo systemctl restart apache2`;Nginx + PHP-FPM:`sudo systemctl restart php-fpm`)才能生效。
使用 .user.ini(共享主机/无 php.ini 权限时)
若无法修改主 php.ini(如虚拟主机),可在网站根目录或入口脚本所在目录新建 .user.ini 文件(注意开头是点),写入:
max_file_uploads = 100
该文件会被 PHP 自动读取(需启用 user_ini.filename = ".user.ini",多数环境默认开启)。无需重启服务,但有缓存延迟(默认 300 秒),可临时加 sleep(1); 测试或等待几分钟。
验证修复是否成功
创建一个测试表单,含 50 个空 file 输入框(或 1 个 multiple 并选 50 个文件),提交后检查 $_FILES 的 count():
<form method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<button type="submit">上传</button>
</form>
<?php
if ($_POST) {
$total = count($_FILES['files']['name'] ?? []);
echo "实际接收到 $total 个文件(目标:100)";
}
?>
确保输出数字 ≥ 你设置的 max_file_uploads 值,且无警告或截断现象。



















