0

我有一个文件输入,它是一个数组,但我以前不再工作,它似乎对多个文件抛出错误,它只是上传最新的文件。我无法弄清楚我做错了什么。

<input type="file" name="userfile[]" id="userfile" class="multi" />

然后在我的控制器中:

$upload_files = $_FILES;
var_dump($upload_files['userfile']['name']);
// get the selected files out of the array
for($i = 0; $i < count($upload_files['userfile']['name']); $i++) {
   $_FILES['userfile'] = array(
      'name' => $upload_files['userfile']['name'][$i],
      'type' => $upload_files['userfile']['type'][$i],
      'tmp_name' => $upload_files['userfile']['tmp_name'][$i],
      'error' => $upload_files['userfile']['error'][$i],
      'size' => $upload_files['userfile']['size'][$i]
);
4

2 回答 2

2

您正在覆盖$_FILES['userfile']数组的每次迭代(这就是为什么只上传最后一个文件的原因)。

每次循环时创建一个新的数组元素。

此外,将您的循环更改为迭代,$upload_files['userfile']而不是$upload_files['userfile']['name']按照上述评论中的建议进行迭代:)


只是一个指针 - 最好分配给循环count($upload_files['userfile'])之外的变量。for如果您的数组只有几个元素,它可能不会有太大的不同,但在处理大型数组时具有巨大的性能优势。

查看http://www.phpbench.com/

于 2012-04-19T12:08:30.513 回答
1

您在每次迭代时都覆盖了数组,请尝试以下操作:

foreach($upload_files['userfile'] as $i => $file) {
   $_FILES['userfile_org'][$i] = array(
      'name' => $file['name'],
      'type' => $file['type'],
      'tmp_name' => $file['tmp_name'],
      'error' => $file['error'],
      'size' => $file['size']
   ); 
  } 
  echo "<pre>"; var_dump($_FILES['userfile_org']); die;
于 2012-04-19T12:20:10.527 回答