2012-10-21 74 views
2

我寫了一個PHP腳本文件上傳和測試我給我的上傳目錄777權限。該腳本正常工作。PHP權限錯誤 - 我需要執行權限?

現在我想刪除執行的原因很明顯的權限,但一旦我這樣做,我得到以下錯誤:

move_uploaded_file([文件路徑])[function.move上傳文件]:未能打開流:權限被拒絕

只要將權限從777降低到776,就會在我嘗試上傳文件時出現此錯誤。我不明白爲什麼執行權限應該與此有關 - 請問有人可以提供一些信息嗎?

謝謝!

回答

3

一個目錄必須具有可執行權限,才能在Unix中使用Linux &。

here報價:

On a directory, the execute permission (also called the "search bit") allows you to access files in the directory and enter it, with the cd command, for example. However, note that although the execute bit lets you enter the directory, you're not allowed to list its contents, unless you also have the read permissions to that directory.

我同意lserni認爲,關於目錄O(第三位)撤銷執行權限的事實導致的問題是令人擔憂的,因爲它表明web服務器訪問目錄既不是所有者,也不是該組的成員。你應該解決這個問題。

0

Just taking the permissions down from 777 to 776 causes this error to appear

這不應該發生。您應該能夠以770個權限運行,即該目錄應該由網站用戶標識擁有,並與該組服務器共享。

這樣,所有者和網絡服務器都能夠操作目錄和數據。理想情況下,爲您的網站提供服務的Web服務器應該採用與網站所有者相同的用戶ID,這樣您可以保持目錄模式700並且只能由您進行讀寫和列出。

如果權限的最後一位數字正在咬你,這意味着服務器正在運行對「所有人」的權限,這對開發網站可能沒問題,但在共享網站上並不太好(想象一下你的密碼可被機器中的任何其他網站所有者讀取)。

但是,如果您在測試機器上運行,則777權限是可以的。目錄可執行位並不意味着可執行文件(目錄無法執行),而僅僅是「可列出的」。沒有那一點,你可以創建和刪除文件,但你不知道它們是否真的存在,並且move_uploaded_files正在反對這種情況。

還有其他解決方案(例如chrooting each virtualhost in Apache);也What are best practices for permissions on Apache-writable directories?

0

看到去除執行需要執行以下命令的權限..

chown -R nobody upload_directory 
chmod -R 755 upload_directory 

第一個命令改變你的upload_directory和文件的所有者下爲「人」,這是什麼樣的PHP下運行。第二個將upload_directory和文件更改爲僅允許用戶訪問寫入。 -R用於遞歸..