2012-10-02 105 views
1

所以我有一個文件上傳部分在我的網站上,用戶可以上傳任何文檔或docx文件夾。繼承人我的html代碼:PHP文件上傳創建目錄

<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
    Select a file: <input type="file" name="upload"> 
<input type="submit"> 

這裏是爲upload_file.php代碼:

<?php 
    session_start(); 
    $allowedExts = array("doc", "docx"); 
    $extension = end(explode(".", $_FILES["upload"]["name"])); 

    if (($_FILES["upload"]["size"] < 200000) 
    && in_array($extension, $allowedExts)) { 
     if ($_FILES["upload"]["error"] > 0) 
     { 
      echo "Return Code: " . $_FILES["upload"]["error"] . "<br />"; 
     } 
     else 
     { 
      echo "Upload: " . $_FILES["upload"]["name"] . "<br />"; 
      echo "Type: " . $_FILES["upload"]["type"] . "<br />"; 
      echo "Size: " . ($_FILES["upload"]["size"]/1024) . " Kb<br />"; 
      echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />"; 

      if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"])) 
      { 
       echo $_FILES["upload"]["name"] . " already exists. "; 
      } 
      else 
      { 
       move_uploaded_file($_FILES["upload"]["tmp_name"], 
       "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]); 
       echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]; 
      } 
     } 
    } else { 
     echo "Invalid file"; 
    } 
?> 

但這不會上傳任何東西,即使它與一個成功的消息說回來。我想這是因爲它不會讓我創建一個目錄。上面的代碼有什麼問題,或者我需要添加一些代碼才能創建一個目錄。在這裏,如果它可以幫助我所有的文件夾結構:

Folder

+0

的可能重複【如何創建目標(文件夾)中PHP使用移動\ _uploaded \ _file()?](http://stackoverflow.com/questions/4384951/how-to-create-destination-folder-in-php-while-using-move-uploaded-file) –

回答

8

你必須創建你想移動,它不會自動得到由move_uploaded_file創建該文件的目錄。

使用mkdir(),http://php.net/mkdir創建目錄,然後移動該文件。

這裏的結束到腳本的替代,它應該做的

// Create directory if it does not exist 
if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) { 
    mkdir("Proposals/". $_SESSION["FirstName"] ."/"); 
} 

// Move the uploaded file 
move_uploaded_file($_FILES["upload"]["tmp_name"], "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]); 

// Output location 
echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]; 
+0

這個代碼是一個很好的起點(當然,錯誤處理留給讀者)。我建議的唯一增強將是使用常量DIRECTORY_SEPARATOR而不是硬編碼「/」 – eliel

2

您需要檢查目錄是否存在,如果沒有,創建它。

if (!file_exists("Proposals/". $_SESSION["FirstName"])) { 
     mkdir("Proposals/". $_SESSION["FirstName"]); 
} 
0

你上傳文件目錄不存在,所以你需要首先創建它,你upload_file.php應該像

<?php 
session_start(); 
$allowedExts = array("doc", "docx"); 
$extension = end(explode(".", $_FILES["upload"]["name"])); 

if (($_FILES["upload"]["size"] < 200000) 
&& in_array($extension, $allowedExts)) { 
    if ($_FILES["upload"]["error"] > 0) 
    { 
     echo "Return Code: " . $_FILES["upload"]["error"] . "<br />"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["upload"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["upload"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["upload"]["size"]/1024) . " Kb<br />"; 
     echo "Temp file: " . $_FILES["upload"]["tmp_name"] . "<br />"; 

     if (file_exists("Proposals/".$_SESSION["FirstName"] ."/" . $_FILES["upload"]["name"])) 
     { 
      echo $_FILES["upload"]["name"] . " already exists. "; 
     } 
     else 
     { 
      // Check if directory exists if not create it 
      if(!is_dir("Proposals/". $_SESSION["FirstName"] ."/")) { 
       mkdir("Proposals/". $_SESSION["FirstName"] ."/"); 
      } 
      move_uploaded_file($_FILES["upload"]["tmp_name"], 
      "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]); 
      echo "Stored in: " . "Proposals/". $_SESSION["FirstName"] ."/". $_FILES["upload"]["name"]; 
     } 
    } 
} else { 
    echo "Invalid file"; 
} 
?>