在使用通配符的 PHP 中使用 chmod 不起作用

Using chmod in PHP using wildcards doesn't work

好像

chmod("*.txt", 0660);

无效。

我知道我可以:

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

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

所以你可以像你提到的那样使用 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);
    }
}