PHP$_FILES计数不正确


PHP $_FILES Incorrect Count

我有一个文件输入,它选择了多个如下所示的文件:

<input type = 'file' name = 'file[]' id = 'file' class = 'file' multiple = 'multiple' />

当用户选择一个(或多个)文件时,我会使用Javascript将id和类更新为"oldFile",然后预先准备另一个文件输入,但使用file2[]而不是file[]。只要用户不断拾取文件,就会发生这种情况。然后,当用户提交表单时,文件会被发送到我的PHP脚本中。我尝试了两种计算文件数的方法,如下所示。

第一个是简单的

$files = count($_FILES);

第二种是

$f = 0;
foreach($_FILES as $b)
{
    $f++;
}
$files = $f;

但是,当我按特定顺序选择文件时,它会返回不正确的计数。

如果我选择两个文件,然后是一个文件,再是两个文件并提交表格,它会说我提交了4个文件。

如果我选择两个文件,然后选择一个文件,它正确地说是3个文件。

你知道问题可能是什么吗(不确定我是否有道理)?

PHP的$_FILES在使用基于数组的文件上传名称时有点不稳定。在这种情况下,创建的结构实际上是

$_FILES = array(
   'name' => array(
      0 => 'name of first file'
      1= > 'name of second file'
      etc...
   'type' => array(
      0 => 'type of first file',
      1 => 'type of second file'
   etc..
);

这意味着您将获得与上传中跟踪的字段数相匹配的常量计数($_FILES)。为了准确统计上传的文件数量,你需要计算其中一个子密钥,例如

count($_FILES['name']);

不要问我为什么要这样做。PHP的设计已经足够愚蠢了,这只是证明其愚蠢的众多例子之一。

一个更明智/理智的设计师会使用

$_FILES = array(
   0 => array(... all data about file #1),
   1 => array('... all data about file #2),
   etc...
)