2013-04-04 2 views
1

У меня есть форма для загрузки файлов на сервер, который приводится ниже:PHP проблема загрузки нескольких файлов

<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 и подкаталог, а имя файла - test.php. Файл test.php должен быть загружен в 56/usr_bin/и 68/usr_bin. Но теперь код работает только для первого (56/usr_bin /). Где я совершил ошибку? Любая помощь должна быть оценена!

+0

'Exec (MkDir ("firmware_update проверка /".$."/» $ Dir_folder.. "/", 0777)), 'почему есть' $ dir_folder' здесь? и все же установить снова на '$ path' –

+0

$ dir_folder даст значение, подобное usr_bin. Я вижу 56/usr_bin/и 68/usr_bin. Но test.php только в первом файле, 56/usr_bin /. – NewPHP

+0

Но я установил $ i = 0. Я попробовал 4 флажка, но файлы загружались только в первый! – NewPHP

ответ

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++; 
      } 
     } 
    } 
+0

благодарю вас за ответ, нет, это не сработает! – NewPHP

Смежные вопросы