【发布时间】:2018-01-10 10:20:00
【问题描述】:
我有一个上传多个文件的功能。我使用两个 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 以便插入的文件名与上传的文件名匹配的最佳方法是什么?
注意:
- 我可能会在文件名中添加一些内容,但我不想删除任何内容(日期时间格式应该存在)
【问题讨论】:
-
上传日期的确切秒数是否重要。为什么不将
date()与您的变量一起移出循环并将其分配给一个变量并将其传递给两个循环?您仍然可以获得代码开始处理批处理而不是单独处理的确切时间。 -
@MatthewBrent 是的,我也需要秒数用于其他目的。
-
为什么不在循环之前生成
$random值,您可以将其附加到所有上传文件名?而不是依赖date()? -
@giollianosulit 我需要文件名中的日期时间。
-
好吧,然后把
date("ymdhis")存为变量,在循环之前并连接进去?
标签: php codeigniter loops foreach