PHP: umask - Manual

downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

unlink touch

Last updated: Fri, 26 Jan 2007

view this page in

# umask

(PHP 3, PHP 4, PHP 5)

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

## Описание

int umask ( [int mask] )

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

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

add a note User Contributed Notes
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.`
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`
add a note
unlink touch

Last updated: Fri, 26 Jan 2007
show source | credits | stats | sitemap | contact | advertising | mirror sites
Copyright © 2001-2007 The PHP Group
All rights reserved.
This mirror generously provided by: Yahoo! Inc.
Last updated: Sat Mar 10 09:32:46 2007 PST