umask

(PHP 3, PHP 4, PHP 5)

umask -- Изменяет текущую umask

Описание

int umask ( [int mask] )

Устанавливает umask() PHP в значение mask & 0777 и возвращает старую umask. Если PHP используется как модуль сервера, umask восстанавливается после завершения каждого запроса.

Вызов umask() без аргументов вернёт текущую umask.



umask
ShaD@TW
16-May-2006 09:32
Notice that directory(s) and file(s) sometimes have different results.

<?php
umask
(0670);                    //- set umask
$handle = fopen('file', 'w');  //- 0006
mkdir("/path/dir");            //- 0107
?>

calculate the result:
<?php
$umask
= 0670;
umask($umask);
//- if you are creating a new directory, $permission = 0777;
//- if you are creating a new file, $permission = 0666.
printf( "result: %04o", $permission & ( 0777 - $umask) );
?>

BTW, as the manual said, the form of umask() is "int umask ( [int mask] )", so if you want to print/echo any umask, don't forget to convert it from DEC (because it returns a "int") to OCT.

<?php
$umask
= umask();          //- returns the current umask, which is a "int"
$umask = decoct($umask);  //- Now, $umask is a "string"
echo $umask;
?>

Don't forget that the argument(parameter) is a "int", too.

<?php
umask
(777);    //- WRONG! Even though you maybe use "umask 777" in some OS.
umask(0777);  //- OK
?>

If there was any mistake, please correct my statement.
18-Feb-2006 08:31
Using (cmask - umask) is a wrong way to calculate the new mask:

0022 - 0700 = 0656 WRONG
0700 & ~0022 = 0700 CORRECT

Correct php code:
<?php
$rmask
= ($cmask & ~$umask);
?>
andi<at>splitbrain.org
03-Mar-2005 02:03
To play around with umasks and permissions use this little fragment:

<?
$umask
= 0012;
$perm  = 0777;
printf("umask: %04o perm: %04o result: %04o\n",
      
$umask,$perm,$perm & (0777 - $umask));
?>
trisk at earthling dot net
31-Jan-2005 09:25
I thought I would clarify the numbering scheme used here, as it confused me at first.

On the UNIX console, the command:

umask "blah"

In this instance, the umask command forces "blah" to be an octal number, regardless of how many digits you use and regardless of any leading zeroes.  In PHP, umask() does not default to octal as the console command does, it uses whatever numeric format you specify.

For example:

umask(213);

This uses the decimal integer 213 and not the octal number 213 as you would expect when using the console command.  In this case, it would set the umask to the octal number "325".

To enter the number as octal, just add one or more zeroes to the left of the number:

umask(0213);
umask(07);
umask(0044);

etc.
notepad at codewalkers dot com
18-Jun-2004 06:43
$old = umask(0);
chmod("/some/dir", 0755);
umask($old);
sam at totallydigital dot co dot nz
19-Sep-2002 09:04
The first comment perhaps didn't quite make clear what's on with your umask and the permissions.

The permission passed to a command is first bitwise ANDed with the _INVERSE_ of the current umask, then applied to the file.

For example, umask = 0011 and permission = 0775
The inverse of 0011 = 0766

0775 AND 0766
= 111.111.101 AND 111.110.110
= 111.110.100
= 0764
wptate at olemiss dot edu
29-Feb-2000 01:19
The -S option will print the symbolic values of umask, while changing the umask to the new setting. 
(i.e. umask -S 007 will print 'u=rwx,g=rwx,o=')

<touchunlink>
 Last updated: Mon, 14 Nov 2005