PHP多文件上传场景下如何区分不同指定分类的上传文件?
实现方案
提供两种可直接落地的实现方式,按需选择即可:
方案1:修改表单name属性(最稳妥,推荐)
直接给上传控件的数组name指定关联键,和分类一一对应,后续调整表单顺序也不会出错。
表单修改部分
仅修改三个文件输入框的name属性即可:
<div class="form-group row"> <label for="FormControlFile1" class="col-sm-2 col-form-label">X</label> <input type="file" class="form-control-file col-sm-10" id="FormControlFile1" name="myfile[x]"> </div> <div class="form-group row"> <label for="FormControlFile2" class="col-sm-2 col-form-label">Y</label> <input type="file" class="form-control-file col-sm-10" id="FormControlFile2" name="myfile[y]"> </div> <div class="form-group row"> <label for="FormControlFile3" class="col-sm-2 col-form-label">Z</label> <input type="file" class="form-control-file col-sm-10" id="FormControlFile3" name="myfile[z]"> </div>
PHP处理代码修改
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { if(isset($_FILES['myfile'])){ $tmp_arr= $_FILES['myfile']; } $files = []; // 直接遍历关联键获取分类标识 foreach($tmp_arr['name'] as $type => $name) { $files[] = array( 'name' => $name, 'type' => $tmp_arr['type'][$type], 'tmpName' => $tmp_arr['tmp_name'][$type], 'error' => $tmp_arr['error'][$type], 'size' => $tmp_arr['size'][$type], 'category' => strtoupper($type) // 新增分类字段 ); } foreach($files as $file){ echo '<br/>'.$file['name'] .' is for: ' . $file['category']; } }
方案2:不修改表单,通过固定顺序映射分类
如果不想调整现有表单代码,可以提前定义分类和表单顺序的映射关系,你现有表单的提交顺序固定为X/Y/Z,和数组下标一一对应即可。
完整PHP处理代码
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { // 按表单展示顺序定义分类映射,和X/Y/Z的顺序严格对应 $typeMap = ['X', 'Y', 'Z']; if(isset($_FILES['myfile'])){ $tmp_arr= $_FILES['myfile']; } $files = []; for($i=0; $i<count($tmp_arr['name']); $i++){ $files[] = array( 'name' => $tmp_arr['name'][$i], 'type' => $tmp_arr['type'][$i], 'tmpName' => $tmp_arr['tmp_name'][$i], 'error' => $tmp_arr['error'][$i], 'size' => $tmp_arr['size'][$i], 'category' => $typeMap[$i] // 通过下标匹配对应分类 ); } foreach($files as $file){ echo '<br/>'.$file['name'] .' is for: ' . $file['category']; } }
内容的提问来源于stack exchange,提问作者Smart Dev
相关产品推荐
相关产品推荐

