2015-09-10 3 views
3

Я работаю над простой вещью, которая загружает файлы с помощью PHP.
Моя форма:Как загрузить файлы в определенный подкаталог

<form action="upload.php" enctype="multipart/form-data" method="POST"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
    <input type="file" name="file_upload"> 
    <input type="submit" name="submit" value="Upload"> 
</form> 

И PHP:

$id = '3'; 
if (isset($_POST['submit'])) { 
    $tmp_file = $_FILES['file_upload']['tmp_name']; 
    $file = basename($_FILES['file_upload']['name']); 
    $upload_dir = "uploads"; 
    if (file_exists($upload_dir."/".$file)) { 
     die("File {$file} already exists in {$upload_dir} folder."); 
    } 
    if(move_uploaded_file($tmp_file, $upload_dir."/".$file)) { 
     $message = "File " . $file . " uploaded to " . $upload_dir; 
     echo $message; 
    } else { 
     # Code with message about error. 
    } 
} 

Файлы успешно загружать только в uploads папке. В этой папке uploads у меня есть несколько других папок: 1, 2, 3 и так далее.

Мой вопрос: Как перенести файлы в определенную подпапку после загрузки? (Имя подпапки - от переменной id.) Спасибо!

+0

Вы хотите «переместить» или «скопировать» ??? – Saty

+1

'$ upload_dir =" uploads/". $ id; ' –

+0

Это то, что я пытался, если переменная' 'uploads /". $ id' он не загружается. Но я получаю 'UPLOAD_ERR_OK'. –

ответ

0

Эффективный способ сделать это:

Этот метод переместить файл, когда он получить загружен.

if (!empty($post_array['IconURI'])) { 
     $IconURI_current_path = "./" . $post_array['IconURI']; 
     if (file_exists($IconURI_current_path)) { 
      // Desired folder structure 
      $structure = './uploads/' . $primary_key . "/"; 
      // To create the nested structure, the $recursive parameter 
      // to mkdir() must be specified. 
      if (is_dir($structure) || mkdir($structure, 0777, true)) { 
       $dir = './uploads/' . $primary_key . "/" . $post_array['IconURI']; 
       chmod("$IconURI_current_path", 0777); 
       if (copy("$IconURI_current_path", "$dir")) { 
        @unlink("$IconURI_current_path"); 
        //rename IconURI from [ 9723d-632ac-e325b-db1b8-icon.jpg ] 
        $IconURI = "uploads/" . $primary_key . "/" . $post_array['IconURI']; 
       } 
      } else { 
       die('Failed to create folders...'); 
      } 
     } else { 
      echo "Banner file does not exist"; 
     } 
    } 

сценарий также обрабатывает разрешения файлов. Некоторое время из-за файла разрешений файлов каталогов или файлов не удалось переместить.

Может использоваться как функция обратного вызова, например, в продуктах питания CRUD или других плагинах третьих лиц. i.e эти плагины загружают файлы в их каталог по умолчанию, и вам нужно переместить файл в другой конкретный каталог.

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