Показать сообщение отдельно
  #2 (permalink)  
Старый 17.04.2024, 20:29
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

function printTree(int $level = 1) : void {
    // открываем дескриптор текущей директории
    $dir = opendir('.');
 
    // завершаем работу функции, если не удалось открыть дескриптор
    if (!$dir) return;
 
    // перебираем элементы директории по её дескриптору
    while (($file = readdir($dir)) !== false) {
        // если это ссылка на текущую директорию или родительскую - игнорируем этот элемент
        if ($file == '.' || $file == '..') continue;
        // если это не директория - игнорируем этот элемент
        if (!is_dir($file)) continue;
 
        // выводим "отступ" от левого края
        for ($i = 0; $i < $level; $i++) echo ' ';
        // выводим название директории
        echo $file . PHP_EOL;
 
        // пытаемся изменить текущую директорию на дочернюю директорию $file
        // если не удалось - пропускаем директорию $file
        if (!chdir($file)) continue;
 
        // рекурсивно вызываем эту же функцию, чтобы она 
        // отобразила "дерево" каталогов, но уже для дочерней директории $file
        printTree($level + 1);
        // изменяем текущую директорию на изначальную
        chdir('..');
        // непонятно зачем, но пытаемся сбросить буфер вывода
        flush();
    }
 
    // закрываем дескриптор
    closedir($dir);
}
Ответить с цитированием