Какова цель использования umask(0);
в php?
Я видел это несколько раз и не могу понять из документации, что он точно делает.
Может кто-нибудь объяснить это и когда было бы полезно использовать?
Какова цель использования umask(0);
в php?
Я видел это несколько раз и не могу понять из документации, что он точно делает.
Может кто-нибудь объяснить это и когда было бы полезно использовать?
Установка umask
в 0000
(или просто 0
) означает, что созданные ранее созданные файлы или созданные каталоги не будут иметь никаких прав, первоначально отозванных. Другими словами, a umask
нуля приведет к тому, что все файлы будут созданы как 0666
или доступны для записи в мире. Каталоги, созданные в umask
0
, будут 0777
.
Обычно, когда вы видите umask(0)
, он должен следовать непосредственно вызовом chmod()
, чтобы явно установить разрешения, необходимые для вновь созданного файла или каталога, для чего-то другого, кроме записываемого в мире.
Соблюдайте осторожность при установке umask на ноль! Это может быть опасно и в основном полезно только для создания файлов, которые позднее должны быть написаны веб-сервером, когда веб-сервер работает как другой пользователь, который "реальный" пользователь, которому также нужно будет иметь возможность изменять файлы, созданные веб-сервером. В противном случае системный по умолчанию umask скорее всего будет 0022
, доступный для записи владельцем файла, но не другими. В этом случае, если вы вошли в систему под обычной учетной записью пользователя, файл, созданный веб-сервером под PHP, не будет доступен для вас.
Вместо создания файлов, записываемых в мире, обычно лучше управлять каталогами, которые веб-сервер пишет более явно. Если файлы, созданные внутри каталога, должны иметь определенные групповые разрешения, может быть целесообразно установить бит 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
umask в основном является настройкой по умолчанию для создания файлов. В сущности, безопаснее включить ваш chmod по умолчанию, а затем записать файл, чем записать его, а затем chmod (некоторые говорят). В конце дня время между окончанием написания файла и запуском chmod было бы в лучшем случае в миллисекундах, поэтому я скептически отношусь к этому.
umask() sets PHP umask to mask & 0777 and returns the old umask
В основном он устанавливает разрешения на запись по умолчанию для всех, что вы вставляете в ОС, таких как Linux, а затем возвращает старый, чтобы вы могли reset вернуть его обратно. Это относится к самому процессу PHP.
Комментарии на странице документа: http://php.net/manual/en/function.umask.php будут разъясняться на примере.