在可写目录中创建的目录是否始终可写?

时间:2013-12-26 11:03:07

标签: php writable

我有一个可写的目录。如果我使用

在其中创建另一个目录
mkdir("test", 0777);

这是否使测试目录可写?

如果我只使用

mkdir("test");

是否从其父目录继承了可写属性?

如果没有,有办法让它继承。所以我不必单独使它成为可写的?

3 个答案:

答案 0 :(得分:1)

不,目录或文件不从父元素继承属性。但是test将是世界可写的,因为您使用0777明确地设置了它。我们有3个八进制数字,这些数字代表资源的所有者,组和世界的权利。因为8是2的3次幂,所以我们可以用每个八进制数字代表3个状态(因为4 + 2 + 1 = 7),这取决于设置的值(这是一个位掩码,即基于2的幂,方便按位操作)操作)

1 = executable
2 = writable
4 = readable

答案 1 :(得分:1)

你们两个假设的选择都不是真的。结果权限既不是完全 777,也不是父目录中的“继承”。

要了解将会发生什么,您需要了解两点:

  • 什么是 umask 。在* nix系统中,它是一个特殊的掩码,应用于新创建的文件系统元素(目录或文件。实际上,目录也是一个文件,但这不是问题)。您可以通过umask()
  • 在PHP中使用它
  • 对于mkdir(),第二个参数不仅仅是“确切权限”。 umask 会对其进行修改。因此,最终结果可能(并且,最佳机会是 - 将)与777不同。

还有一点很重要 - Windows权限系统与* nix不同 - 在Win系统下工作时,您不能依赖上述描述。

答案 2 :(得分:0)

mkdir的第二个参数是新目录的访问掩码。

mkdir( 'test', 0777 );

将在您当前的位置(getcwd())创建目录测试,并使其对所有人都可写。

不会继承访问权限,而是为每个文件和目录单独设置访问权限