2014-01-06 94 views
2

我正在嘗試創建我的第一個網站,一個用戶可以在線銷售東西的拍賣/在線交易平臺。爲此,用戶可以添加他們的商品,並通過我的網站上的表單上傳圖片。雖然上傳的形式,我檢查文件上傳目的地與關於CHMOD的說明

if(!is_dir($uploadpath)) 
{ 
    mkdir($uploadpath,0644,true); 
} 

,然後createa目錄來存儲文件,如果當前不存在。

但是,我是編程新手(上面的代碼被複制,我不知道CHMOD究竟是什麼)谷歌搜索告訴我,CHMOD處理權限(即誰可以訪問文件系統上的文件)和顯示結果,處理如何CHMOD等,但不是它實際是什麼和做什麼。

從PHP手冊,

<?php 
// Read and write for owner, nothing for everybody else 
chmod("/somedir/somefile", 0600); 

// Read and write for owner, read for everybody else 
chmod("/somedir/somefile", 0644); 

// Everything for owner, read and execute for others 
chmod("/somedir/somefile", 0755); 

// Everything for owner, read and execute for owner's group 
chmod("/somedir/somefile", 0750); 
?> 

維基百科,我可以看到「寫入」權限允許用戶添加文件,所以我可能會需要給我的用戶寫入權限上傳圖片?

另外我想「執行」是指運行一個文件(例如app.exe),但我不明白這是如何適用於網站,因爲所有頁面都在HTML/PHP?

最後,「讀取」權限有什麼作用?如果我希望其他用戶查看已上傳項目的圖片,我是否需要授予他們讀取權限? 我希望用戶上傳圖片,併爲其他用戶查看它,也會要求讀取權限?

我打算最終將我的第一個網站託管在網絡主機上,一旦我完成編碼。在這種情況下,我是否正確地說根據手冊的「所有者」是網絡主機?如果是,我將如何允許我的用戶在我的網站上添加/寫入他們的項目和圖片嗎?我應該使用上面的代碼上傳我的CHMOD 0644上傳文件路徑時,還是會阻止我的網絡主機執行此操作。如果有,有哪些可用選項對我來說?

+1

您的第一個網站的在線拍賣地點......非常有抱負。 – Phlume

回答

0

「所以我可能需要給我的用戶寫權限上傳 圖片?」

不,你不!但是,您必須爲上傳文件夾/目錄提供寫入權限 - 您希望上傳文件的文件夾。根據您選擇允許用戶上傳的文件,您可以設置執行位。

而且我在想,「執行」是指運行文件(例如APP.EXE) 雖然我不知道怎樣將適用網站上,因爲所有的網頁 是HTML/PHP的?

真。你的php文件不需要設置執行位。設置PHP文件的讀取位足以讓它們被php解釋。

最後,什麼是「讀取」權限嗎?如果我想爲其他用戶 查看已經上傳的作品中的畫面,我需要 給他們讀權限?我希望用戶上傳圖片,並且 供其他用戶查看,也會要求讀取權限?

是的!假設你擁有你的文件並且擁有apache作爲組,你需要爲兩者設置讀取權限,以便人們「閱讀」或查看你的圖像!

......按說明書說的「所有者」,是網絡主機?

不是真的,你也可以成爲店主!

這個想法或更好的做法是將文件/目錄分配給所有者:www-data,並且 將0644設置爲文件,644意味着文件的所有者可讀和可寫,並且可讀由該文件的組所有者中的用戶以及其他人可讀的。 和 將0755設置爲目錄,755意味着讀取並執行每個人的訪問權限,併爲文件的所有者寫入訪問權限

+0

如果我在上傳時動態生成文件夾/目錄,我是否按照上面的代碼示例使用mkdir爲文件夾/目錄提供了寫入權限?如果我是所有者,是否意味着我正在操作自己的服務器而不是託管一個虛擬主機? –

+0

首先回答你的第二個問題,當我稱爲所有者時,我指的是作爲文件/目錄所有者的用戶!因爲你是你文件的所有者,並不意味着你自己擁有服務器! IT只是意味着你有一個用戶帳號與你希望託管你的站點的服務器,而你的web根目錄中的文件的所有者就是你。雖然很可能apache是​​所有者(如果它是這樣設置的)。 – Enihr

+0

如果您即時生成文件夾,那麼您必須按照上面的代碼示例寫入權限。否則,你將無法上傳這些文件夾中的文件 – Enihr

2

您不需要在PHP中使用chmod文件。唯一需要讀取它們的用戶是PHP運行的用戶(通常是運行Web服務器的用戶)。

此外,請注意而不是將用戶上傳的文檔存儲在您的Web服務器的文檔根目錄下。否則,他們可以上傳任何他們想要的並執行它。始終將文件根目錄外的用戶上傳文件按您指定的名稱(例如ID號或ID散列號不帶文件名擴展名)存儲。使用您自己的腳本訪問這些文件並使用readfile()或同等功能。

+0

對不起,如果這似乎很明顯,但從PHP手冊,它說默認的mkdir是0777,這是CHMOD的最大可能訪問,如果不是所有人和任何人都可以按照他們的意願去做? –

+0

這是正確的。而且,爲什麼你會使用你的web腳本中的'mkdir()'?在大多數情況下你都不需要。 – Brad

+0

我打算讓用戶在允許他們將內容上傳到我的網站之前註冊。因此,當我保存他們上傳的內容時,將根據他們在我的數據庫中的用戶ID進行上傳。 E.g /User/1/item/20/item5.jpg在這種情況下,我將不得不爲每個用戶和上傳的每個需要mkdir的項目創建一個目錄。 –