我有一个上传多个文件的功能。我使用两个foreach来上传文件。在第一个foreach中,我循环上传的文件,
$j_upl = count($my_upload["name"]);
$isUploaded = 0;
$files = $_FILES;
for($i=0;$i<$j_upl;$i++){
$random_name = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4);
$this->load->library('upload', $config);
$_FILES['upload_act']['name'] = $files['upload_act']['name'][$i];
$_FILES['upload_act']['type'] = $files['upload_act']['type'][$i];
$_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i];
$_FILES['upload_act']['error'] = $files['upload_act']['error'][$i];
$_FILES['upload_act']['size'] = $files['upload_act']['size'][$i];
$this->upload->initialize($config);
$this->upload->do_upload('upload_act');
}
在$random_name
中,我使用.date("ymdhis")
添加到file_name。因此,该文件将重命名为the file name."_".datetime uploded
。
在第二个foreach中,我使用它将$random_name
插入数据库。
foreach($details as $rows){
$file_name = substr($rows['val_upl'],0,-4)."_".date("ymdhis").$ii.substr($rows['val_upl'],-4);
$dt_act['UPL_FILENAME'] = ($rows['val_upl'] == "") ? NULL : $file_name.$ii;
$this->MProject->ins_activity_m($dt_act);
$ii += 1;
}
我使用相同的方法来获取$file_name
。如果我上传大约2-3个文件,则$file_name
与$random_name
匹配。但是,如果要上传的文件数量较多,则会开始与$random_name
不匹配,因为('Ymdhis')
中的第二个文件不同。
使$random_name
与$random_name
匹配的最佳方法是什么,以便插入的file_name与上传的file_name匹配?
注意:
答案 0 :(得分:0)
如果你需要从第一个循环中捕获确切的文件名,为什么不在第一个只存储文件名的循环中构建一个数组呢?然后,您可以通过$ rows的值引用数组,而不是尝试重建名称。 (这也取决于这两个循环之间的内容。)
答案 1 :(得分:0)
解决此问题的最简单方法是在第一个for循环中创建一个关联数组,并将所需信息作为键值对传入。您不需要遍历此对象,因为您可以使用已知循环中的值的键,如现有文件名,以访问下面的值...
$file_uploads = array();
for($i=0;$i<$j_upl;$i++){
$random_name = substr($my_upload["name"][$i],0,-4)."_".date("ymdhis").$i.substr($my_upload["name"][$i],-4);
$file_uploads[$my_upload["name"][$i]] = array(
'new_name' => $random_name,
'some_other_value' => $some_other_var
);
$this->load->library('upload', $config);
$_FILES['upload_act']['name'] = $files['upload_act']['name'][$i];
$_FILES['upload_act']['type'] = $files['upload_act']['type'][$i];
$_FILES['upload_act']['tmp_name'] = $files['upload_act']['tmp_name'][$i];
$_FILES['upload_act']['error'] = $files['upload_act']['error'][$i];
$_FILES['upload_act']['size'] = $files['upload_act']['size'][$i];
$this->upload->initialize($config);
$this->upload->do_upload('upload_act');
}
foreach($details as $rows){
$file_name = $file_uploads[substr($rows['val_upl']]['new_name'];
$dt_act['UPL_FILENAME'] = ($rows['val_upl'] == "") ? NULL : $file_name.$ii;
$this->MProject->ins_activity_m($dt_act);
$ii += 1;
}
请注意我没有对此进行测试,我在这里编码是盲目的,但这应该足以让你到那里。