我將目錄chmod到777,與目錄內容相同。不過,我得到了「拒絕權限」錯誤。不管文件權限如何,如果apache不是組/所有者,PHP會拋出此錯誤嗎?這裏是一個的失敗的呼叫:爲什麼我會在嘗試重命名目錄時在PHP中獲得「權限被拒絕」?
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
我將目錄chmod到777,與目錄內容相同。不過,我得到了「拒絕權限」錯誤。不管文件權限如何,如果apache不是組/所有者,PHP會拋出此錯誤嗎?這裏是一個的失敗的呼叫:爲什麼我會在嘗試重命名目錄時在PHP中獲得「權限被拒絕」?
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
您正在編輯更高級別的目錄,因此PHP用戶需要具有對該目錄的寫入權限。
嘗試運行以下腳本:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
看到那個返回什麼。
這可能是因爲apache不是父目錄的所有者。重命名(或移動)文件與創建新文件基本相同。
澄清,PHP只能重命名目錄,它有實際所有權過來:
-rwxrwxrwx user user temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user user script.php
承擔的script.php正試圖重命名這兩個目錄:
// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions
rename('temp', 'temp.bak');
// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak');
另一件事,可能有助於這些種類的情況是嘗試降低權限。我已經看到了apache拒絕應用程序權限來執行某些操作的場合,因爲它的權限也設置爲高。我的猜測是,這是爲了鼓勵良好的安全實踐。
在安全模式下是正確的,但在所有其他情況下不需要所有權 - 具有適當權限的簡單chmod就足夠了。 – brezanac 2012-01-10 01:49:02