2012-03-21 65 views
0

我一直使用下面的代碼在Apache服務器上創建文件夾,但最近在服務器上我有一個權限被拒絕的錯誤。Apache服務器上的Httpd文件權限

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0777, true); 
    chmod('img/user/'.$id, 0777); 
} 

在互聯網上,我發現了httpdneeds to have write permissions像這樣的上傳目錄:

drwxrwxrwx 2 user  staff 512 Jan 07 12:32 uploads/ 

哪裏是此權限設置?我不直接訪問服務器。有沒有其他的選擇?

+0

您可能可以使用FTP設置權限。 – PeeHaa 2012-03-21 11:16:20

回答

1

如果您可以避免它,或者甚至無法讀取這個問題,那麼您從不想將權限設置爲世界可寫。如果仍然有點寬泛,0770會是更好的選擇。重點是相關文件夾需要由Web服務器用戶寫入。例如,在許多主機管理Apache會被用戶nobody運行,所以更合適的權限應該是這樣的:

drwxrwx--- 2 nobody  nobody 512 Jan 07 12:32 uploads/ 

現在,還有就是如果你不能得到直接進入自己設置權限問題除了通過PHP,因爲一些網絡主機將不允許您在PHP中運行chmod或其他權限或所有權修改。也就是說,如果您使用的是cPanel(也可能是其他主機系統也這樣做),您可以使用在線文件管理器,通過瀏覽到相應的目錄並使用位於頁面頂部的change permissions來完成所需的操作。

因此,最終,您需要的是:如果您需要能夠在特定位置創建目錄,則需要確保該位置可由Web服務器寫入。在您的示例中,這意味着您需要首先在img/user上設置適當的權限,然後再嘗試創建img/user/$id。這意味着img/user必須擁有0770的權限,並且必須歸屬於nobody:nobody(用戶或組都可以在此上下文中工作,您不需要兩者),或者它必須具有0777的權限。然後,當您創建特定的用戶目錄,你可以做到這一點,像這樣:

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0770, true); 
} 

...因爲它會已經由適當的用戶所擁有,你就已經把它的寫權限僅僅是因爲你的網絡服務器首先創建它。

如果你找不到一個非PHP的方式來做到這一點,那麼你必須讓你的虛擬主機來幫助。

+0

謝謝@Jason .. – 2012-03-21 15:49:49

0

PHP以用戶身份運行:www-data在組中:www-data(Ubuntu)或其他依賴於服務器操作系統的其他內容。 如果您無法通過FTP自行完成,您可以要求您的提供商在地圖/文件上設置正確的訪問權限。