PHP-如何递归设置所有文件和文件夹的权限(755&644)?

时间:2020-04-05 19:51:09

标签: php permissions chmod

我从类似的线程那里得到了这段代码。

当我将其添加为服务器上的Cron作业时(设置为每分钟或* * * * *以进行测试),它不会重置任何文件或文件夹权限。我的目标是使其每周运行一次,并将任何目录重置为775,并将任何文件重置为644。

我的测试涉及使用Filezilla更改文件权限(例如,将文件更改为444),然后等待1分钟,以查看此Cron Job是否将其更改回我当前想要的状态(775目录,644文件)。到目前为止,没有任何改变。

我已经验证了Cron Job正在运行并正在执行我创建的PHP文件(我只是将其命名为reset_permissions.php文件)。

https://stackoverflow.com/a/28482124/13231178(原始线程)

下面是代码,根据我的需要进行了一些修改。

<?

header('Content-Type: text/plain');

/**
* Changes permissions on files and directories within $dir and dives recursively
* into found subdirectories.
*/
function chmod_r($dir)
{
    $dp = opendir($dir);
    while($file = readdir($dp))
    {
        if (($file == ".") || ($file == "..")) continue;

        $path = $dir . "/" . $file;
        $is_dir = is_dir($path);

        set_perms($path, $is_dir);
        if($is_dir) chmod_r($path);
    }
    closedir($dp);
}

function set_perms($file, $is_dir)
{
    $perm = substr(sprintf("%o", fileperms($file)), -4);
    $dirPermissions = "0775";
    $filePermissions = "0644";

    if($is_dir && $perm != $dirPermissions)
    {
        echo("Dir: " . $file . "\n");
        chmod($file, octdec($dirPermissions));
    }
    else if(!$is_dir && $perm != $filePermissions)
    {
        echo("File: " . $file . "\n");
        chmod($file, octdec($filePermissions));
    }

    flush();
}

chmod_r(dirname(__DIR__));

任何人都可以告诉我我做错了什么或为什么它不起作用吗?

0 个答案:

没有答案
相关问题