PHP $_FILES 计数不正确

标签 php file uploading

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

<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...
)

关于PHP $_FILES 计数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345298/

相关文章:

php - 检查字符串是否 x% 相等

javascript - 如何使用 AJAX 将选择框值作为数组从 PHP 的一个页面传递到另一个页面?

php - Wordpress、PHP - 将图像插入主题主页

java - 如何更改此设置,使它无法实现我想要的方式?

c# - 在控制台应用程序中覆盖 txt 文件 C# 中的输出

file - 如何读取我的 ASP.NET Core 项目中的本地文件?

error-handling - 为什么我不能将草图上传到我的董事会?

cocoa - 如何在Cocoa中允许使用WebView上传文件?

php - value 文件 uploader : size value for onComplete, 列表项 Hook 和文件覆盖选项

jquery - jQuery/iframe 文件上传解决方案的问题