【问题标题】:PHP - mkdir : Create a folder with the same rights as it's parent [duplicate]PHP - mkdir:创建一个与其父级具有相同权限的文件夹[重复]
【发布时间】:2019-08-29 23:42:07
【问题描述】:

有没有办法在 PHP 中创建一个与 parent 具有相同权限的 folder

例如: 我有一个文件夹/a/b 具有0755 权限, 我想创建具有相同权限的文件夹a/b/c0755 在这种情况下。

据我所知,PHP 默认使用mkdir 函数创建具有0777 权限的文件夹。有没有一种聪明的方法来检测父文件夹权限,然后使用相同的 chmod 创建子文件夹?

编辑:在这里,我正在寻找一种解决方案来创建具有mkdir 的 floder,而不是如何检索文件/文件夹权限。

@ArtisticPhoenix 解决方案正是我所寻找的。

谢谢。

【问题讨论】:

  • 我认为你可以这样做 chmod($filename, fileperms($parent)) 你可能不得不使用 substr(sprintf('%o', fileperms($parent)),-4) (来自文档页面)将它变成八位字节,但我以前从未在 chmod 中使用过它。对于$parent,不要忘记dirname($filename)
  • @miken32 感谢您的回复。但不,它不是重复的,实际上解决方案是两个建议的总和。 ArtisticPhoenix 在他的解决方案中做到了

标签: php permissions chmod mkdir


【解决方案1】:

你可以试试我刚刚擦掉的这个东西(未经测试)

chmod($filename, substr(sprintf('%o', fileperms(dirname($filename))),-4));

http://php.net/manual/en/function.chmod.php

http://php.net/manual/en/function.fileperms.php

我认为其他功能非常不言自明,或者足够基本,它们不需要链接。 dirname($filename) 当然是文件目录。

这个substr(sprintf('%o', fileperms(...)),-4) 的东西来自文档页面:

示例 #1 将权限显示为八进制值

  echo substr(sprintf('%o', fileperms('/tmp')), -4);
  echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);

这似乎是我们想要使用的东西,因为这是chmod 想要的,但它是否需要测试可能值得测试(也许它足够聪明,可以理解它)。我以前没有真正使用过fileperms。在大多数情况下,我只需要is_writable

希望它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多