2011-12-10 38 views
0

在我的代碼PHP創建777權限的新目錄。怎麼樣?

$path = 'images/product/'.$pid; 
if(! file_exists($path)) { 
    mkdir($path, 0777); 
} 
... 
... 

,但是當我在終端

drwxr-xr-x 2 www-data www-data 4.0K 2011-12-10 19:28 1/ 

鍵入

ls -l 

這是我得到的許可,但不是我想要的。

我想允許web用戶根據運行時創建的產品ID(目錄)上傳項目。

我該怎麼做?

+3

你真的需要777? *真*?將用戶和組的所有權應用於允許該框上的其他用戶/組寫入該目錄會好得多。如果你使用777,所以Apache可以寫入目錄,那麼就沒有必要,它已經被'www-data'所有,而任何通過PHP/Apache上傳文件的人都已經擁有寫權限。 – Tak

+0

我認爲沒有必要777.感謝您的建議。 –

回答

1

這是因爲默認情況下默認情況下,Apache umask默認設置爲0022。

由於umask是撤銷權限。例如

default 0777 rwx.rwx.rwx 
umask 0022 ---.-w-.-w- 
Final 0755 rwx.r-x.r-x 

有兩種方法來解決這個問題,

1. Edit /etc/apache2/envvars 
    add in **umask** *<permission to be revoke>* 
    restart apache 
2. add in umask(0000); before the mkdir('mydir', 0777); 
2

對於777個權限,或任何權限

$path = 'images/product/'.$pid; 
if(! file_exists($path)) { 
    $mask=umask(0); 
    mkdir($path, 0777); 
    umask($mask); 
} 

創建目錄...

+0

請注意,不要使用'mkdir($ path,777);'來設置權限,因爲它錯過了0,導致它被解釋爲小數。應該使用(http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/)代替。 –