PHP多文件上传问题

PHP多文件上传问题,php,file-upload,Php,File Upload,我有一个将文件上传到服务器的表单,如下所示: <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']?&

我有一个将文件上传到服务器的表单,如下所示:

<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++;
            }
        }
    }
上传功能如下所示:

<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++;
            }
        }
    }
根据表格,我需要从checkboxeg:56,68等中选择站点,从下拉菜单中选择目录例如:usr、bin,从第二个下拉菜单中选择子目录例如:usr等,并上传文件。上传功能除了一个小问题外工作正常

我们选择的所有文件都应该上传到不同的文件夹。但是上面的代码只是把文件上传到第一个文件夹而已。 例如:如果我们选中复选框56和68、目录usr和子目录bin,文件名为test.php。文件test.php应该上传到56/usr_bin/和68/usr_bin。但现在代码只适用于前56/usr_bin/。我哪里出错了?
任何帮助都应该感谢

我希望您将单个文件上载到不同的文件夹,并且$\u POST['check\u 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++;
            }
        }
    }

execmkdirfirmware_update/$check./.$dir_folder./.,0777;为什么$dir_文件夹在这里?再次设置为$path$dir_folder将给出类似于usr_bin的值。我可以看到56/usr_bin/和68/usr_bin。但是test.php仅在第一个折叠器56/usr_bin/中。但是我已经设置了$I=0。我尝试了4个复选框,但文件只上传到第一个!我看到尝试做一些错误检查它上传没有失败为其他。。