2012-08-24 46 views
48

在php中使用umask(0);的目的是什麼?php umask(0)這是什麼目的

我已經看過幾次了,並且無法從文檔中發現它的確切含義。

有人可以解釋這一點,什麼時候可以使用?

+0

http://php.net/manual/en/function.umask.php這應該會把你說出來,它基本上是爲了創建文件。 – Sammaye

+5

@Sammaye他說文檔沒有真正幫助他。 –

+1

umask的php手冊中的文檔非常糟糕。 – Adam

回答

43

umask設置爲0000(或者只是0)意味着新創建的文件或創建的目錄將不具有最初被撤銷的特權。換句話說,零的umask將導致所有文件被創建爲0666或世界可寫。創建目錄umask0將爲0777

通常,當您看到umask(0)時,應該直接跟調用chmod(),以將新創建​​的文件或目錄所需的權限明確設置爲世界可寫以外的權限。

將umask設置爲零時請謹慎使用!這可能是危險的,並且主要僅用於創建必須稍後由Web服務器寫入的文件,當Web服務器以不同的用戶身份運行時,以及「真實」用戶也需要能夠修改文件由Web服務器創建。否則,系統的默認umask可能類似0022,可由文件所有者寫入,但不能由其他人寫入。在這種情況下,如果您以正常用戶帳戶登錄到本機,則由PHP服務器創建的文件將由您寫入而不是

與創建世界可寫文件不同,通常更好的辦法是更明確地管理Web服務器寫入的目錄。如果在目錄內創建的文件應該具有特定的組權限,則可以建議在該目錄上設置sgid位,以便其中的新文件繼承組所有權。需要訪問該文件的用戶應該是可以訪問該文件的組的成員。這比創建世界可讀的世界可寫文件更安全。

php > umask(0); 
// Should get created as 666 
php > touch('file1.txt'); 

// "2" perms revoked from group, others, gets created as 644 
php > umask(022); 
php > touch('file2.txt'); 

// All revoked (2,4) from group, others, gets created as 600 
php > umask(066); 
php > touch('file3.txt'); 

-rw-rw-rw- 1 me group  0 Aug 24 15:34 file1.txt 
-rw-r--r-- 1 me group  0 Aug 24 15:35 file2.txt 
-rw------- 1 me group  0 Aug 24 15:37 file3.txt 
3

umask基本上是創建文件的默認設置。從本質上講,打開你的默認chmod然後寫入文件比寫它然後chmod它更安全(有人說)。在完成寫入文件和運行chmod之間的時間最多爲毫秒,所以我對此持懷疑態度。

umask() sets PHP's umask to mask & 0777 and returns the old umask 

它基本上設置默認寫入權限,不管你把在OS的如Linux,然後返回原來的,所以你可以重新回來。這適用於PHP進程本身。

對doc頁面的評論:http://php.net/manual/en/function.umask.php將通過示例來闡明。