2012-04-19 75 views
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] 
); 
+1

我相信文件的阵列西港岛线是'$ _FILES [ 'userfile的' ]'not'$ _FILES ['userfile'] ['name']' – Dale 2012-04-19 12:05:50

+1

所以在你的情况下:'$ upload_files ['userfile']' – Dale 2012-04-19 12:06:54

+0

试试这个链接 http://www.codeproject.com/Articles/ 19606/Javascript的PHP-多文件-U pload – chhameed 2012-04-19 12:18:08

回答

2

你覆盖在阵列的每个迭代$_FILES['userfile'](这就是为什么只有最后一个文件上传)

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

此外,改变你的遍历$upload_files['userfile'],而不是$upload_files['userfile']['name']迭代在上述意见提出:)


只是一个指针 - 这是更好地分配count($upload_files['userfile'])一个变量您for循环之外。如果你的数组只有少数几个元素,那么它可能没有太大的区别,但是在使用大型数组时,它有很大的性能优势。

退房http://www.phpbench.com/

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; 
+0

你的ans和deifud ans有什么区别? – chhameed 2012-04-19 12:22:04

+0

唯一的区别是我有样品解决方案。虽然站在没有看到他的回应:( – 2012-04-19 12:38:36