Php 多次上载未按预期工作
我有一个表单,允许用户添加任意多的上传表单。所以最初只有一个,你可以点击“添加更多”到。。。添加更多。有道理。每个输入如下所示:Php 多次上载未按预期工作,php,codeigniter,file-upload,Php,Codeigniter,File Upload,我有一个表单,允许用户添加任意多的上传表单。所以最初只有一个,你可以点击“添加更多”到。。。添加更多。有道理。每个输入如下所示: <input type="file" name="userfile[]" id="userfile[]"> $_FILES['userfile_tmp']['name'] = $_FILES['userfile']['name'][$i]; $_FILES['userfile_tmp']['type']
<input type="file" name="userfile[]" id="userfile[]">
$_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];
但是,当您上载多个文件时,只上载第一个文件。下面是我的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;
$dir=random_字符串('alnum',10);
mkdir('/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir);
$this->load->library('upload');
$error=0;
对于($i=0;$i<计数($_文件['userfile']['name']);$i++):
$\u文件['userfile']['name']=$\u文件['userfile']['name'][$i];
$\u文件['userfile']['type']=$\u文件['userfile']['type'][$i];
$\u FILES['userfile']['tmp\u name']=$\u FILES['userfile']['tmp\u name'][$i];
$\u文件['userfile']['error']=$\u文件['userfile']['error'][$i];
$\u文件['userfile']['size']=$\u文件['userfile']['size'][$i];
$config['upload_path']='/Applications/MAMP/htdocs/extras/uploads/temp/'.$dir;
$config['allowed_types']='jpg | jpeg | gif | png';
$this->upload->initialize($config);
如果($this->upload->do_upload('userfile')):
$error+=0;
其他:
$error+=1;
endif;
endfor;
如果($error>0):
$error=array('error'=>$this->upload->display_errors());
打印错误($error);
其他:
$data=array('upload_data'=>$this->upload->data());
打印(数据);
endif;
如果在for循环之前添加一个回显计数($\u FILES['userfile']['name'];
),它将正确显示文件数。如果在for循环之后使用它,它将错误显示1
你知道我做错了什么吗?我的猜测是,一旦你进入循环,你就会用以下几行覆盖这些值:
$_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];
尝试将其更改为以下内容:
<input type="file" name="userfile[]" id="userfile[]">
$_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\u upload('userfile\u tmp')):
问题在于以下几行:
$_FILES['userfile']['name'] = $_FILES['userfile']['name'][$i];
您正在用另一个值、一个字符串覆盖变量、一个数组。几个月前,我遇到了这个问题,并扩展了核心库,以允许使用单个文件或文件数组(如您所希望的)并适当地显示错误等 它似乎适用于我使用它的目的,不能保证它100%有效,但看看它是否有帮助,我想我用我所做的更改评论了不同的部分: