2013-09-30 40 views
0

當我想要上傳圖片並創建不存在的新目錄時,出現問題它不會生成文件夾$ gallery_name,它將圖片存儲在uploads/galerije/$ username而不是uploads/galerije/$中用戶名/ $ GALLERY_NAME。 任何人都可以幫助我嗎?在php中製作目錄

$username = $_SESSION['username']; 
$gallery_name = $_POST['gallery_name']; 

if (isset($_FILES['files'])) { 
    $errors = array(); 
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name) { 
     $file_name = $key . $_FILES['files']['name'][$key]; 
     $file_size = $_FILES['files']['size'][$key]; 
     $file_tmp = $_FILES['files']['tmp_name'][$key]; 
     $file_type = $_FILES['files']['type'][$key]; 

     if ($file_size > 2097152) { 
      $errors[] = 'File size must be less than 2 MB'; 
     } 

     $desired_dir = "uploads/galerije/" . $username . "/" . $gallery_name; 

     if (empty($errors)) { 
      if (!is_dir($desired_dir)) { 
       mkdir($desired_dir, 0777); // Create directory if it does not exist 
      } 
      if (!is_dir("$desired_dir/" . $file_name) == false) { 
       move_uploaded_file($file_tmp, "$desired_dir/" . $file_name); 
       header("location: index.php"); 
      } 
     } 
     else { 
      print_r($errors); 
     } 
    } 
    if (empty($error)) { 
     echo "Success"; 
    } 
} 
+0

你得到什麼錯誤?確保你的PHP用戶有權創建目錄/文件。 – Jasper

+0

你應該讓mkdir像給出的答案一樣遞歸地創建目錄,但我不認爲這解釋了爲什麼他們被移動到錯誤的目錄。做'$ _POST ['gallery_name'];'是否存在?你可以用var_dump($ _ POST ['gallery_name']);' – immulatin

+1

小心!您在文件操作中使用用戶輸入而不進行任何驗證。一個邪惡的用戶可以簡單地上傳任何文件到你的網站空間的任何目錄。例如,將$ _POST ['gallery_name']設置爲「../../../」,上傳一個名爲index.php的文件,就完成了。 – a4c8b

回答

5

您需要告訴mkdir()以遞歸方式創建目錄(如果它們不存在)。

嘗試通過true您的mkdir()函數:

mkdir($desired_dir, 0777, true); 

php documents特別指出的mkdir()不處理默認遞歸的目錄,爲5.0.0,你可以在參數傳遞更改

+0

我試過但它也不起作用。 – slavkovicdjordje

2

您在這裏使用is_dir

if(is_dir("$desired_dir/".$file_name)==false){ 

當你應該使用file_exists。也許這就是你的問題的部分

2

根據PHP documentation

bool mkdir (string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]]) 

所以,遞歸創建目錄,你可以這樣做:

mkdir("$desired_dir", 0777, true);