Php, как рекурсивно изменить права на папки и файлы?

Дата: 24 марта /

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

<?php

//Параметры функции- путь, права на файлы, права на папки 
function chmod_r($path, $filemode, $dirmode) {
    if (is_dir($path) ) {
        if (!chmod($path, $dirmode)) {
            $dirmode_str=decoct($dirmode);
            print "Failed applying filemode '$dirmode_str' on directory '$path'\n";
            print "  `-> the directory '$path' will be skipped from recursive chmod\n";
            return;
        }
        $dh = opendir($path);
        while (($file = readdir($dh)) !== false) {
            if($file != '.' && $file != '..') {  // skip self and parent pointing directories
                $fullpath = $path.'/'.$file;
                chmod_R($fullpath, $filemode,$dirmode);
            }
        }
        closedir($dh);
    } else {
        if (is_link($path)) {
            print "link '$path' is skipped\n";
            return;
        }
        if (!chmod($path, $filemode)) {
            $filemode_str=decoct($filemode);
            print "Failed applying filemode '$filemode_str' on file '$path'\n";
            return;
        }
    }
}

//Пример использования, выставляем максимальные права для папок и файлов в определенной папке
//здесь "/home/site.ru/www/upload" путь к папке, 0777 - права на файлы, 0777 - права на папки
chmod_r("/home/site.ru/www/upload", 0777, 0777); 
?>

Статьи по теме:

  1. Linux, Debian 5 — как узнать размер папки через консоль?
  2. Linux, Debian — как рекурсивно подсчитать количество файлов в папке?
  3. Как в PHP отсортировать многомерный массив как таблицу?
  4. Linux, Debian 5 – синхронизация папки с фтп каталогом

Метки:

Рубрика: PHP

Оставить комментарий