我有一个文件输入,这是一个数组,但我以前不再工作,它似乎抛出多个文件的错误,它只是上传最新的文件,我无法想象我做错了什么: (
<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]
);
答案 0 :(得分:2)
你在数组的每次迭代中覆盖$_FILES['userfile']
(这就是为什么只上传最后一个文件)。
每次循环时创建一个新的数组元素。
此外,根据上述评论中的建议,将您的循环更改为$upload_files['userfile']
而非$upload_files['userfile']['name']
的迭代:)
只是一个指针 - 最好将count($upload_files['userfile'])
分配给for
循环之外的变量。如果您的阵列只有少量元素,但在处理大型阵列时具有巨大的性能优势,那么它可能没什么区别。
答案 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;