Начнем как всегда с постановки задачи. Нам необходимо получить список всех вложенных директорий и файлов, находящихся в конкретной папке, и выполнить некоторые действия над ними. Для этого напишем функцию, которая будет получать список всех файлов и папок, отделять эти две категории, обрабатывать отдельно и в случае нахождения вложенных папок будет вызывать себя рекурсивно.
В нижеприведенном примере мы будем выполнять действия над вложенными объектами текущей папки, присваивать всем файлам права на чтение/запись/выполнение - 666, а папкам - 777 и выводить их список на экран.
function rdir ($path2dir) {
$d = dir ($path2dir);
while (false !== ($entry = $d->read())) {
if ($entry!='.' && $entry!='..' && $entry!='' ) {
$all_path = $path2dir.$entry;
$new_path = go ($all_path, is_file($all_path));
if (!is_file($all_path)) {
if (!rdir ($new_path)) {
return false;
}
}
}
}
return true;
}
function go ($path2file, $is_file = true) {
if ($is_file) {
# выполняем операцию над файлом
# выведем относительный путь к обрабатываемому файлу
echo $path2file,"\n";
# установим необходимые права на файл
if (!chmod($path2file,0666)) {
return false;
}
} else {
# выполняем операцию над папкой
$path2file = $path2file.'/';
# выведем относительный путь к обрабатываемой директории
echo "\n\n",$path2file,"\n";
# установим необходимые права на папку
if (!chmod($path2dir,0777)) {
return false;
}
}
return $path2file;
}
# начинаем с текущей папки
$folder = './';
# непосредственно вызываем функцию
if (rdir ($folder)) {
echo 'DONE';
}
Tags: chmod, PHP
Оставить комментарий