无法从 php 中的 $_FILES 获取多个上传的文件

Posted

技术标签:

【中文标题】无法从 php 中的 $_FILES 获取多个上传的文件【英文标题】:cannot get multiple uploaded files from $_FILES in php 【发布时间】:2012-01-18 04:23:02 【问题描述】:

我无法从 $_FILES 检索我的 php 代码中的多个文件。 这是输入表单:

<form enctype="multipart/form-data" action="file-upload.php" method="POST">
  Upload the several files:<input type="file" multiple="multiple" name="uploaded" id="id_upload" />
  <input type="submit" value="Upload" />
</form>

这是来自 file-upload.php 的 php 代码:

 // first let's find out how many files were uploaded..
 $numUploadedfiles = count($_FILES['uploaded']);
 $num_FILES = count($_FILES); 
        // BOTH COUNTS ARE 5.  I SELECT 7 FILE NAMES FOR UPLOADING THOUGH.


 echo "<br>" . "The number of uploaded files is == " . $numUploadedfiles;
 echo "<br>" . "Here is the name of _FILES['uploaded']: " . $_FILES['uploaded'];
     // THE NAME REPORTED IS 'array' AND THE COUNT IS 5..


 echo "<br>" . "The count size of _FILES is == " . $num_FILES;
 echo "<br>" . "Here is the name of _FILES => " . $_FILES;
       // HERE ALSO, THE NAME REPORTED IS 'array' AND THE COUNT IS 5.


 echo "<br>file temp_name " . $i . " is: " . $_FILES['uploaded']['tmp_name'];
 echo "<br>file name " . $i . " is: " . $_FILES['uploaded']['name'];
        // THE NAME REPORTED HERE IS THE FILENAME OF LAST OF THE 7 FILES I UPLOADED (not sure why.)


 echo "<br>" . "Here are the filenames: ";
 for($i = 0; $i < $numUploadedfiles; $i++)
 
    echo "<br>filename " . $i . " is: " . $_FILES['uploaded'][$i];
 
 exit();

当我运行它时会发生什么,当“for”循环开始时,一条错误消息指出数组 _FILES['uploaded'][$i] 中的 $i 索引无效。

这是为什么呢?我需要获取这 7 个文件名并能够将它们保存在服务器上。我该怎么做:

1) 获得文件数量的准确“计数”?当我上传 7 个文件时,上面的代码计数为 5

2) 如何在 'for' 循环中正确索引 _FILES 数组? PHP 告诉我 $i 值 0、1、2、3.... 无效。

(P.S. 我正在使用我在Retrieving file names out of a multi-file upload control with javascript 看到的启用多个文件上传的示例中的 input type="file" multiple="multiple" name="uploaded" id="id_upload" 代码)

【问题讨论】:

看到这个了吗?可能会有所帮助(检查 cmets):verens.com/2009/12/28/multiple-file-uploads-using-html5 是的,太可怕了!我不知道为什么很难找到有关它如何工作的信息,以及为什么它的工作方式如此不直观。我很难找到那个信息。很高兴你现在可以正常工作了。 【参考方案1】:

你的名字应该是数组:

【讨论】:

好的——但是现在当我检查 $uploaded_size = $_FILES['uploaded']['size'];价值超过70,000,000!为什么? 感谢 Sudhir,这是让我的代码正常工作的“第一步”。第 2 步来自 Christian 对上述评论中文章的引用。【参考方案2】:

此代码没有实现您的目标。您应该使用多个输入标签。

如果你想上传多个文件,但文件数量是可变的,你可以使用 java 脚本来获取文件数量

【讨论】:

以上是关于无法从 php 中的 $_FILES 获取多个上传的文件的主要内容,如果未能解决你的问题,请参考以下文章

php如何实现一次性上传多个文件

if(isset($_FILES)) 在 PHP 中不起作用

使用PHP处理POST上传时$_FILES数组为何为空

php 在多个上传图片时 怎么获取 要上传的图片宽高

PHP $_FILES 多文件上传问题

php如何将图片转成字节流