php umask(0) какова цель


какова цель использования umask(0); в php?

Я видел это несколько раз, и не могу понять из документации, что это именно так.

может кто-нибудь объяснить это и, когда было бы полезно использовать?

2   51  
2012-08-25 00:23:10

2 ответа:

задание umask to 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's umask to mask & 0777 and returns the old umask

он в основном устанавливает разрешения на запись по умолчанию для всего, что вы вставляете в ОС, такие как Linux, а затем возвращает старый, так что вы можете сбросить он вернулся. Это относится и к самому процессу PHP.

комментарии на странице документа:http://php.net/manual/en/function.umask.php поясню на примере.