在linux系統中,即使我們使用root帳號去手工執行php命令:
mkdir('test', 0777);
結果文件的權限依然為:
drwxr-xr-x 2 root root 4096 Jun 17 11:28 test
很明顯這個權限是 755
為什么會這樣呢?
在linux系統中在創建文件/文件夾時有一個默認權限,此權限受 umask 設置影響,在/etc/bashrc配置文件中我們可以找到如下配置:
# By default, we want this to get set. # Even for non-interactive, non-login shells. if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi
這里就說明了問題,linux系統中默認的umask為022,與我們的777 &運算之后,就變成了 755,這就是原因所在了。
解決辦法:
你可能會想到,我把這里的022 改為 000 不就可以了么?
當然可以,不過這里的設置直接影響到linux系統的默認權限設置,不僅僅是PHP的問題。所以不建議您這么做。
正確的做法應該是:
mkdir('test', 0777); chmod('test', 0777);
先創建目錄,再使用chmod將權限修改為 777 ,這樣就達到我們的目的了。
最后,需要注意一點,權限值最好使用八進制表示,即“0”開頭,而且一定不要加引號。
我就犯了一個錯,加了引號
chmod('test', '0777'); // 錯誤,不要加 引號('')