上传多个文件数组错误

时间:2012-04-19 12:02:06

标签: php jquery multifile

我有一个文件输入,这是一个数组,但我以前不再工作,它似乎抛出多个文件的错误,它只是上传最新的文件,我无法想象我做错了什么: (

<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]
);

2 个答案:

答案 0 :(得分:2)

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

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

此外,根据上述评论中的建议,将您的循环更改为$upload_files['userfile']而非$upload_files['userfile']['name']的迭代:)


只是一个指针 - 最好将count($upload_files['userfile'])分配给for循环之外的变量。如果您的阵列只有少量元素,但在处理大型阵列时具有巨大的性能优势,那么它可能没什么区别。

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

答案 1 :(得分: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;