📜  为什么PHP脚本不创建具有 777 权限的目录?

📅  最后修改于: 2022-05-13 01:54:10.765000             🧑  作者: Mango

为什么PHP脚本不创建具有 777 权限的目录?

在PHP,由于默认umask ,我们无法创建具有 777 权限的目录。 umask称为用户掩码或用户文件创建掩码。这是创建新文件或文件夹时给予的一种基本权限或默认权限。 umask的默认值一般是022umask设置在创建文件或目录时必须从系统默认值中删除权限。

首先,让我们了解umask在文件或目录创建和权限设置期间实际是如何工作的。我们将在下面的例子中使用 mkdir()函数。

  • 示例 1:
For example, a mask 0022 means that you don't want 
group and others modify the file.

default 0666 rw-.rw-.rw-
umask   0022 ---.-w-.-w-
Final   0644 rw-.r--.r--

That means any file from now will have 0644 permissions.

重要的是要了解umask撤销、删除系统默认的权限,因此它不能授予系统默认没有的权限。上例中,系统默认为666,无法使用umask创建具有执行权限的文件。



  • 示例2:假设新建目录的权限为665 OR mkdir(“geeks”, 655);文件夹“geeks”将拥有权限: drw-wx-wx

The original permission according to 655 is drw-r-xr-x.
But the result is drw--wx-wx.
Permission to be applied: 655
Default umask           : 022
Final                   : 633

This is obtained by performing subtraction.

因此,当我们尝试创建一个权限为 777 的目录时,我们得到的不是drwxrwxrwx ,而是对应于 755(从 777 中减去 022)的drwxr-xr-x 。这就是我们无法创建权限为 777 的目录的原因。

还没有结束,因为我从来没有说过创建一个权限为777的目录是不可能的。那么让我们学习如何创建一个权限为777的目录,按照以下步骤操作:

  • 步骤 1:这一行将umask更改为零,同时将前一个存储到$oldmask 中
$oldmask = umask(0)
  • 第 2 步:这一行使用所需的权限和(现在不相关的) umask 来创建目录
mkdir("Geeks", 777);
  • 第 3 步:这一行将umask恢复到原来的样子。
umask($oldmask);

这是您创建具有 777 权限的目录的方法。目录的符号表示中的权限777drwxrwxrwx 。此权限允许所有者用户、组和其他人读取、写入和执行,因此没有限制。此权限意味着作为同一服务器上的用户的任何人都可以读取、写入和执行该文件。对于文件夹,任何用户都可以将文件复制到其中。如果您的网站使用共享服务器,这显然听起来很危险。

参考资料: https://www. PHP.net/manual/en/函数.umask。 PHP