2012-05-18 106 views
4

以下是獨家新聞:我需要能夠使用PHP腳本創建文件夾,並將圖像文件上傳到這些文件夾。這裏是我的代碼:無法刪除使用PHP創建的目錄或文件(a.k.a權限地獄)

創建一個目錄:

mkdir('[path]/images/foldername'); 


上傳圖片:

if ($_FILES["file"]["error"] > 0 || $_FILES["file"]["type"] != "image/jpeg") // file must be valid and .jpg 
{ 
    echo "Error: " . $_FILES["file"]["error"] . "<br />"; 
} 
else 
{ 
    echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
    echo "Stored in: " . $_FILES["file"]["tmp_name"] . '<br />'; 

    if(file_exists($path ."/" . $_FILES["file"]["name"])) 
    { 
     echo $_FILES["file"]["name"] . " already exists. "; 
    } 
    else 
    { 
     move_uploaded_file($_FILES["file"]["tmp_name"], $path ."/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . $path ."/" . $_FILES["file"]["name"]; 
    } 
} 

FTP編輯器可讓這些錯誤:

[L] DELE 20.jpg 
[L] 550 Could not delete imagename.jpg: Permission denied 

然後

[L] RMD foldername 
[L] 550 Can't remove directory: Directory not empty 

我試圖改變我的FTP編輯的權限,但得到這個錯誤:

[L] SITE CHMOD 777 [路徑]/FOLDERNAME [L] 550上無法改變燙髮[路徑] /文件夾名稱:不允許的操作
我嘗試使用SSH與膩子刪除文件,但也沒有工作。

請幫幫我!

回答

4

後,您將上傳的文件,嘗試做:

@chmod($path ."/" . $_FILES["file"]["name"], 0777); 

什麼的。您可能想要將權限更改爲更好的。

+0

@Nate,這應該工作。 Mitch說它將文件的所有權限授予系統上的任何用戶,所以即使FTP下運行的帳戶不是該文件的所有者,也應該能夠從ftp中刪除該文件。 – Sergi

+0

此解決方案不足:試圖刪除的用戶必須可以寫入封閉的目錄。 – wallyk

+0

謝謝!!!這樣做的工作!那麼,我應該在創建每個文件夾後包含這個聲明嗎? – Nate

1

您可以更改用戶帳戶的FTP服務器下運行使用相同的用戶作爲你的PHP腳本(可能是WWW的數據或httpd的)

+0

ftp服務器不強制登錄到FTP的用戶的權限/所有權,而不是ftpd運行的用戶? – hobs

+0

我認爲這取決於您爲FTP服務器設置身份驗證的方式。您可以使用集成身份驗證或FTP自己的身份驗證。 – Sergi

+0

有道理。但不幸的是,這意味着更改'ftpd'用戶可能沒有什麼區別 - 例如默認的Ubuntu安裝,也可能是ftpd最現代的默認配置。 – hobs

3

它看起來像你的PHP安裝運行,爲不同的用戶比你FTP會話。因此,您的PHP上傳腳本可以創建您的FTP用戶無法觸及的文件;-)。

主要有三種方式來處理這個問題:

  1. 寫一個PHP腳本,刪除你要刪除的文件。使用unlink()。谷歌也會給你一些遞歸實現。
  2. 更改文件的權限(使用chmod注意,您可以輕鬆地將文件訪問給不應該有這種可能性的人員或進程,請勿在生產環境中執行此操作)
  3. 請確保您的FTP用戶和你的PHP用戶是一樣的。您需要成爲目標機器上的root用戶,或者需要機器上的友好管理員進行相應設置。