我有一个表单将文件上传到服务器,如下所示:
<form action="/upload/" method="post" enctype="multipart/form-data">
<? foreach($this->devices as $d): ?>
<input type="checkbox" name="check_list[]" value="<?=$d['id']?>"/>
<?=$d['site']?>
<? endforeach ?>
Select Directory:
<select name="optone" size="1" onchange="setOptions(document.myform.optone.options[document.myform.optone.selectedIndex].value);">
<option value="0">Select the directory</option>
<option value="usr">/usr</option>
</select>
Select subdirectory:
<select name="opttwo" size="1">
<option value=""></option>
</select>
Choose files to upload: <input type="file" id="files" name="files[]" onchange="filesProcess(this.files);" /><br />
<output id="list"></output>
<input type="submit" value="Update" style="align:center"/>
</form>
上传功能如下:
$count=count($_FILES['files']['name']);
$i=0;
if(!empty($_POST['check_list']))
{
foreach($_POST['check_list'] as $check)
{
$dir=$_POST['optone'];
$subdir=$_POST['opttwo'];
$dir_folder=$dir."_".$subdir;
exec(mkdir("firmware_update/".$check."/",0777));
exec(mkdir("firmware_update/".$check."/".$dir_folder."/",0777));
while($i<$count)
{
$f=$_FILES['files']['tmp_name'][$i];
$name=$_FILES['files']['name'][$i];
$path="firmware_update/".$check."/".$dir_folder."/".$name;
move_uploaded_file($f,$path);
$i++;
}
}
}
根据表格,我需要从复选框中选择网站(例如:56,68等),从下拉菜单中选择目录(例如:usr,bin),从第二个选择子目录(例如:usr等)下拉菜单和要上传的文件。除了一个小问题外,上传功能运行良好。
我们选择的所有文件都应上传到不同的文件夹。但上面的代码只将文件上传到第一个文件夹。 例如:如果我们选中复选框56和68,则目录usr和子目录bin以及文件名是test.php。文件test.php应上传到56 / usr_bin /和68 / usr_bin。但现在代码只适用于第一个(56 / usr_bin /)。我哪里弄错了? 任何帮助都应该受到赞赏!
答案 0 :(得分:0)
我希望您将单个文件上传到不同的文件夹,$_POST['check_list']
确定文件夹。
如果是这种情况,您可以将$i=0
移至foreach
循环吗?我希望问题发生的原因。
请尝试此代码。
$count=count($_FILES['files']['name']);
if(!empty($_POST['check_list']))
{
foreach($_POST['check_list'] as $check)
{
$i=0;
$dir=$_POST['optone'];
$subdir=$_POST['opttwo'];
$dir_folder=$dir."_".$subdir;
exec(mkdir("firmware_update/".$check."/",0777));
exec(mkdir("firmware_update/".$check."/".$dir_folder."/",0777));
while($i<$count)
{
$f=$_FILES['files']['tmp_name'][$i];
$name=$_FILES['files']['name'][$i];
$path="firmware_update/".$check."/".$dir_folder."/".$name;
move_uploaded_file($f,$path);
$i++;
}
}
}