【问题标题】:Using chmod in PHP using wildcards doesn't work使用通配符在 PHP 中使用 chmod 不起作用
【发布时间】:2021-01-28 05:39:50
【问题描述】:

好像

chmod("*.txt", 0660);

没用。

我知道我可以:

  1. chmod 文件一个一个:它可以工作,但我不知道所有的名字,所以我不能使用它。
  2. 使用exec。它有效,但我不喜欢它有几个原因(速度、安全等)。
  3. 使用scandir。它可以工作,但又很慢,我猜对于一个简单的操作来说太多了

我真的很想直接使用 chmod。甚至可能吗?谢谢。

【问题讨论】:

  • 您能否详细说明您为什么要更改文件权限?您可以在将文件写入文件系统时执行此操作
  • 这是个好主意,起初我虽然可能很难,但是...有没有办法创建一个已经具有这些属性的文件,或者我应该稍后对其进行 chmod?
  • 真的,我想知道为什么它被否决以及被谁投反对票。这是一个完全合法的问题,我证明我知道如何以三种不同的方式做到这一点。如果我问我如何以第四种方式做到这一点,请原谅我。我的印象就是问一些你不知道答案的问题。我想真的应该有人来芭堤雅和我一起住。
  • 添加了一个我认为会有所帮助的答案。所以我相信有人已经标记了这个问题,因为第一句话是 chmod... 不起作用。但没有任何上下文,它确实有帮助。也许说你想要做什么。例如“我正在尝试迭代特定文件夹中的所有文件并更改权限。我尝试了chmod("*.txt", 0660);,但没有成功

标签: php chmod


【解决方案1】:

所以你可以像你提到的那样使用scandir 来做到这一点,是的,文件系统可能会很慢,你可以添加一个签入,这样你就不会对已经处理过的文件执行此操作

<?php

$files = scandir('./');
foreach ($files as $file) {
    // check here so you don't have to do every file again
    if (substr(sprintf('%o', fileperms($file)), -4) === "0660") {
        echo "skipping " . $file; 
        continue;
    }

    $extension = pathinfo($file)['extension'];
    if ($extension === 'txt') {
        chmod($file, 0660);
    }
}

或者你可以使用glob

<?php

$files = glob('./*.{txt}', GLOB_BRACE);
foreach($files as $file) {
    // check here so you don't have to do every file again
    if (substr(sprintf('%o', fileperms($file)), -4) === "0660") {
        echo "skipping " . $file; 
        continue;
    }

    $extension = pathinfo($file)['extension'];
    if ($extension === 'txt') {
        chmod($file, 0660);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    相关资源
    最近更新 更多