php umask

来源:互联网 发布:项韧带钙化 知乎 编辑:程序博客网 时间:2024/06/05 00:44

今天写一个简单的php代码
<?php
$old=umask(0);
$fp=fopen("aa.txt","w");
fclose($fp);
umask($old);
?>
目的是想让建立的文件默认属性是777
但是生成的文件默认属性是666
比较郁闷,后来到baidu上搜索发现了一个关于umask函数介绍的文章:

linux中的 umask 函数主要用于:在创建新文件或目录时 屏蔽掉新文件或目录不应有的访问允许权限。

文件的访问允许权限共有9种,分别是:rwxrwxrwx

它们分别代表:用户读 用户写 用户执行 组读 组写 组执行 其它读 其它写 其它执行

屏蔽的规则如下:

1. 不管屏蔽码是多少,

    新创建的文件默认不具有可执行允可权限。

    新创建的目录默认具有可执行允可权限。

2. 屏蔽码的格式为八进制格式,共三个八进制数。可设置如下 002 或 022 或 ……

3. 其中的每一个八进制数由三位表示,分别是 读 写 执行

4 2 1

例如 002 用二进制表示为: 0 0 0 — 0 0 0 — 0 1 0

4 2 1 4 2 1 4 2 1

4. 产生的文件为 umask 值求反后的允可权限,即

对于文件: ~002 = 664(新创建文件所应具有的访问权限)

对于目录: ~002 = 775(新创建目录所应具有的访问权限)

看完后恍然大捂,还是自己学艺不精,呵呵

建立一个 具有777 属性的目录
<?php
$old=umask(0);
mkdir(aa,0777);
umask($old);
?>

 

 

unmak

说明

int umask ([ int $mask ] )

umask() 将 PHP 的 umask 设定为 mask & 0777 并返回原来的 umask。当 PHP 被作为服务器模块使用时,在每个请求结束后 umask 会被恢复。

无参数调用 umask() 会返回当前的 umask。

Note: 在多线程的服务器上尽量避免使用这个函数。创建文件后要改变其权限最好还是使用 chmod()。使用 umask() 会导致并发程序和服务器发生不可预知的情况,因为它们是使用相同的 umask 的。

Example #1 umask() 例子

<?php
$old 
umask(0);
chmod("/path/some_dir/some_file.txt"0755);
umask($old);

// Checking
if ($old != umask()) {
    die(
'An error occured while changing back the umask');
}
?>

以上为php manual里面的信息,下面来看一下 umask(18)是什么意思

 我以为我会澄清编号方案用在这里,因为它一开始让我感到困惑

在UNIX控制台,命令:

umask ??“

这种情况下,umask命令部队“??“是一个八进制数,不管有多少位数,也不管使用任何前导零。在PHP中,umask值()不是默认为八进制作为控制台命令做,它使用任何你指定的数字格式

例如:

umask(213);

本品采用十进制整数213,而不是八进制数213的时候,你想到使用控制台命令。在这种情况下,它的umask设置八进制数字“325

要输入八进制数,只需添加一个或多个数字左边的

的umask0213);
的umask(07);
的umask0044);

那么umask(18)  在unix或linux下参数18会转换为8进制22,那么   777-22-755  也就是将文件的权限修改为755