2010-01-12 95 views
7

使用mkdir()並將遞歸標誌設置爲true時,是否所有創建的目錄都獲得指定的chmod或最後一個?例如:遞歸mkdir()和chmod()?

mkdir('/doesnotExist1/doesnotExist2/doesnotExist3/', 0755, true); 

將新創建的目錄/doesnotExist1//doesnotExist1/doesnotExist2/也得到了CHMOD爲/doesnotExist1/doesnotExist2/doesnotExist3/ = 0755一樣嗎?

如果沒有,是否有任何方法可以強制以上行爲

我會自己測試這個,但是我沒有訪問* nix盒ATM。

+0

當然這屬於serverfault? – 2010-01-12 09:31:35

+2

@ILMV:否;這是關於PHP的。 – 2010-01-12 09:33:07

+2

@ILMV - 這是關於PHP的'mkdir'的問題,所以我不這麼認爲。 – 2010-01-12 09:33:34

回答

7

剛剛在使用PHP 5.2.12的gentoo linux上測試過:它們都具有相同的權限。

[email protected]:~$ php -a 
Interactive shell 

php > mkdir('asd/def/ghi', 0700, 1); 
php > ^C 
[email protected]:~$ ls -hal asd 
total 12K 
drwx------ 3 soulmerge soulmerge 4.0K 2010-01-12 10:32 . 
drwxr-xr-x 79 soulmerge soulmerge 4.0K 2010-01-12 10:32 .. 
drwx------ 3 soulmerge soulmerge 4.0K 2010-01-12 10:32 def 
+0

太快了,謝謝!很高興PHP能夠做到這一點。 =) – 2010-01-12 09:39:39

3

C函數負責的mkdir( 'localfilesystem',X,真)是在主/流/ plain_wrapper.c php_plain_files_mkdir()。並且它將php_mkdir(dir, mode TSRMLS_CC);稱爲它應該創建的「第一個」目錄,並且對於所有子目錄,它將調用VCWD_MKDIR(buf, (mode_t)mode))。 php_mkdir()會執行一些安全模式檢查,然後調用VCWD_MKDIR 所以是的,mode參數用於由mkdir(p,x,true)創建的所有目錄。