2012-08-26 159 views
0

我想做一個PHP上傳,將上傳到特定的文件夾。 一個人會選擇他們希望上傳的文件旁邊的下拉框,這是一個文件夾列表。這是因爲它組織文件。PHP上傳到特定文件夾

<?php 
session_start(); 
if(!isset($_SESSION["USER"]["Admin"])){ 
    header("Location: index.html?unath"); 
} 

$folder = mysql_real_escape_string($_POST['loc']); 

$target_path = "../../shared/docs/$folder"; 




$upload2 = $target_path . basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $upload2)) { 
    echo "The file ". basename($_FILES['uploadedfile']['name']). 
    " has been uploaded"; 
} else{ 
    echo "There was an error uploading the file, please try again!"; 
} 

?> 

目前代碼上傳文件到「文檔」文件夾而不是文檔/文件夾。相反,它將文件夾名稱放在文件的前面。對於示例 - 如果文件夾名爲「ABC」和我的文件名爲robs.docx將其上傳到主文檔文件夾中,並調用它abcrobs.docx

回答

2

你有一個丟失的斜槓

替換該行:

$upload2 = $target_path . basename($_FILES['uploadedfile']['name']); 

有:

$upload2 = $target_path ."/". basename($_FILES['uploadedfile']['name']); 

OR:

衆議員花邊這一行:

$target_path = "../../shared/docs/$folder"; 

有:

$target_path = "../../shared/docs/".$folder."/"; 
+0

我看到我現在出了問題..小白錯誤:)感謝的是:d – Rsmithy

+0

我會,但我要等到計算器讓我 – Rsmithy

0

你缺少$ target_path後斜線

+0

這真是一個評論,而不是一個答案。 – Lix

+0

'./。'在某種程度上,它回答我的問題,如我要看看我的代碼,看看我錯過了「/」 – Rsmithy

0

$target_path的末尾添加/

$target_path = "../../shared/docs/$folder/"; 
1
  1. 你不需要mysql_real_escape_string,因爲這裏沒有涉及到SQL。
  2. 如果沒有建立數據庫連接,mysql_real_escape_string回報null。所以你可能會丟掉$_POST['loc']的價值。
  3. 你永遠也不會使用用戶提供的值,而沒有真正在文件系統操作什麼,你要操縱什麼真正徹底的檢查。請參閱Security threats with uploads
  4. 使用var_dump可以自由地查看您的值在各個階段的樣子,並進行一些調試。
+0

我只是複製的東西從舊腳本的'$文件夾= mysql_real_escape_string($ _POST ['loc']);'當時我正在構建一個粗略的腳本,我將開發;爲安全和重複的文件名稱。感謝您的反饋和鏈接 – Rsmithy

+0

此上傳區域也位於受限區域 - 只有管理員用戶(我已授權他們)可以訪問 - 他們將文件上傳到門戶網站上的所有用戶均可訪問的區域(通過網頁) – Rsmithy

0

應該正確轉義的變量:

$target_path = "../../shared/docs/". $folder ."/"; 
相關問題