PHP - Как я могу рекурсивно установить разрешения для всех файлов и папок (755 и 644)? - PullRequest
0 голосов
/ 05 апреля 2020

Я получил этот код из аналогичной темы.

Когда я добавляю его в качестве задания Cron на моем сервере (устанавливается на каждую минуту или * * * * * для тестирования), он не сбрасывает разрешения для файлов или папок. Моя цель - запускать его один раз в неделю и сбрасывать любой каталог на 775, а любой файл на 644.

Мое тестирование включает использование Filezilla для изменения прав доступа к файлу (например, изменение файла на 444) и затем ожидание 1 минуты. чтобы увидеть, меняет ли это задание Cron то, что я в данный момент хочу (каталог 775, файл 644). Пока что никаких изменений не сделано.

Я проверил, что задание Cron запускается и выполняет созданный мной файл PHP (я только что назвал файл reset_permissions. php).

{ ссылка } (Оригинальная тема)

Ниже приведен код, слегка измененный для моих собственных нужд.

<?

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__));

Может кто-нибудь сказать мне, что я сделал неправильно или почему он не работает?

...