2014-02-27 62 views
-5

我試圖使用mkdir文件夾,但沒有成功,我可以看到路徑是正確的,但$ _post沒有從窗體輸入獲取文件夾的名稱($ _post [ '文件夾名'是空的)不知道有什麼問題。 (我有所有的權限,以使該文件夾safe_mode設置爲關閉PHP mkdir與表單輸入和安全

+5

嘗試使用$ _POST(大小寫) – Schleis

+2

PHP中的變量名稱區分大小寫。另外,a)使用用戶輸入來影響像文件系統實體這樣的東西是一個非常糟糕的主意,並且b)你沒有檢查mkdir調用的成功或其他方面,只是假設它起作用。永遠不要假設可能失敗的操作已經成功。 – GordonM

+0

男孩,我希望你的用戶名不允許包含諸如'../ anotherUserName'或'../../../ etc'這樣的字符。 – DarkDust

回答

1

您需要使用$_POST得到文件名。

正如在評論中發佈的那樣,您還需要使用$_POST['filename']執行某些操作,以確保用戶不會嘗試向您的腳本發佈相對路徑,並嘗試在您不打算的位置創建文件夾。至少要確保該變量不包含'..'因爲你預先設置了一個路徑,所以我認爲你不必擔心直接路徑到'/',但是你也可能想要使輸入無效在裏面有一個'/'。

-4

變化

if (!file_exists($path)) { 
     mkdir("$path/$filename", 0777); 
     echo "The directory was successfully created."; 
    } 

if (!is_dir($path)) { 
     mkdir("$path/$filename", 0777); 
     echo "The directory was successfully created."; 
    } 
+0

不解決任何問題 – GordonM

+0

請不要從'$ _POST()'生成的名稱創建一個文件夾我認爲這是危險的考慮'XSS' – Temitayo

+0

@Temitayo所以我該怎麼做,,,我需要做名稱的文件夾,我想我不想讓文件夾名稱在mkdir函數中,所以即時通訊使用$ _post – anmo

0

你總是可以試試這個:

<?php 
include("models/db-settings.php"); 
include("models/config.php"); 

$foldername = $_POST["foldername"]; 
$filename = $foldername; 
$path  = __DIR__ . "/uploads/" . $loggedInUser->username; 
$fullPath = $path . "/" . $filename; 
if (!file_exists($fullPath)){ 
    mkdir($fullPath, 0777); 
    echo "The directory was successfully created."; 
} 
echo $fullPath; 

?> 

<form action="mkdir.php" method="post"> 
    <input type="text" name="foldername" id="foldername" value="FolderName"> 
    <input type="submit" value="submit"> 
</form> 
+0

你犯的錯誤與OP – GordonM

+0

@GordonM不一樣,我不是,OP詢問爲什麼它不工作,而不是如何添加驗證。這不起作用的原因是因爲路徑不是完整的路徑,也向下投票的人民評論,因爲你認爲你的評論是正確的不是最好的方法。順便說一句,我糾正了變量名稱。 – Bloafer

+1

它不工作,因爲他把$ _post,而不是$ _POST。至少這可能是它無法正常工作的諸多原因之一。 – GordonM