我有一个表单,允许用户根据需要添加任意数量的上传表单。所以最初有一个,你可以点击“添加更多”来...添加更多。说得通。每个输入如下所示:
<input type="file" name="userfile[]" id="userfile[]">
但是当您上传多个文件时,只会上传第一个文件。下面是我的PHP。我正在使用CodeIgniter和文件上传库。
$dir = random_string('alnum', 10);
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir);
$this->load->library('upload');
$error = 0;
for ($i = 0; $i < count($_FILES['userfile']['name']); $i++):
$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['userfile']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['userfile']['size'][$i];
$config['upload_path'] = '/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir;
$config['allowed_types'] = 'jpg|jpeg|gif|png';
$this->upload->initialize($config);
if ($this->upload->do_upload('userfile')):
$error += 0;
else:
$error += 1;
endif;
endfor;
if ($error > 0):
$error = array('error' => $this->upload->display_errors());
print_r($error);
else:
$data = array('upload_data' => $this->upload->data());
print_r($data);
endif;
如果我在for循环之前添加echo count($_FILES['userfile']['name'];
,它会正确显示文件数。如果我在for循环后使用它,它会错误地显示1。
知道我在这里做错了吗?
答案 0 :(得分:2)
我最好的猜测是,一旦你进入循环,你可以用这些行覆盖这些值:
$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['userfile']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['userfile']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['userfile']['size'][$i];
尝试将其更改为以下内容:
$_FILES['userfile_tmp']['name'] = $_FILES['userfile']['name'][$i];
$_FILES['userfile_tmp']['type'] = $_FILES['userfile']['type'][$i];
$_FILES['userfile_tmp']['tmp_name'] = $_FILES['userfile']['tmp_name'][$i];
$_FILES['userfile_tmp']['error'] = $_FILES['userfile']['error'][$i];
$_FILES['userfile_tmp']['size'] = $_FILES['userfile']['size'][$i];
然后使用if ($this->upload->do_upload('userfile_tmp')):
答案 1 :(得分:1)
几个月前我遇到了这个问题,并将核心库扩展为允许单个文件或文件数组(正如您所希望的那样)并适当地显示错误等。
它似乎适用于我使用它的功能,不能100%保证它,但看看它是否有帮助,我想我评论了不同的部分我做了一些改变:
https://github.com/tgriesser/Codeigniter-Libraries/blob/master/MY_Upload.php
答案 2 :(得分:0)
问题是这些问题:
$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];
你正在用一个字符串覆盖你的变量,一个数组。