2012-08-01 127 views
1

外我公司目前有以下幾種:move_uploaded_file地方文件的目標目錄

if (in_array($_FILES['userfile']['type'], $mimeTypes)) 
     { 

$target_path = "./uploads/{$_SESSION['email']}"; 

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

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $target_path)) { 
    echo "The file ". basename($_FILES['userfile']['name']). 
    " has been uploaded"; 

} else{ 
    echo "There was an error uploading the file, please try again!"; 
} 

當有人創建一個登錄,爲用戶使用他們的電子郵件,0666權限創建的目錄。

當前,move_uploaded_file()將文件放在用戶目錄的頂部,位於uploads目錄中。錯誤正在拋出。我多次檢查過我的相對路徑是否正確。

我使用的是Ubuntu,上傳的文件上有一個Lock符號,但可以拖放到用戶的文件夾中。

回答

2

由於basename()的輸出將不包含/,因此您的$target_path在用戶目錄後面缺少/

// Append trailing slash 
$target_path = "./uploads/{$_SESSION['email']}/"; 
$target_path = $target_path . basename($_FILES['userfile']['name']); 

一個目錄正確的權限應該是0755(你不希望它全球可寫的!),因爲目錄應該有執行由文件系統遍歷權限。您可以將其設爲可分組寫入(0775),並確保上載目錄的組設置爲Apache Web服務器用戶。這可以通過在uploads /目錄下設置setgid並將其組設置爲apache用戶來完成,因此使用下面創建的目錄會繼承正確的寫入權限,而不是世界可寫的。

+0

你明白了!是的,我chmod回到755.我試圖讓這個工作不同的權限。 – V1GG3N 2012-08-01 01:39:31

1

看起來您的$target_path需要/之後,或加入下一行將只是一個文件,其電子郵件地址前加上它。

$target_path = "./uploads/{$_SESSION['email']}/"; 

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

如果它還是把它在uploads/目錄,檢查$_SESSION['email']設置正確。

相關問題