Печать дерева каталогов файловой системы
Пример формирует дерево каталогов файловой системы на PHP
// Печать дерева каталогов файловой системы.
// Функция распечатывает имена всех подкаталогов в текущем каталоге,
// выполняя рекурсивный обход. Параметр $level задает текущую
// глубину рекурсии.
function printTree($level=1) {
// Открываем каталог и выходим в случае ошибки.
$d = @opendir(".");
if (!$d) return;
while (($e=readdir($d)) !== false) {
// Игнорируем элементы .. и .
if ($e=='.' || $e=='..') continue;
// Нам нужны только подкаталоги.
if (!@is_dir($e)) continue;
// Печатаем пробелы, чтобы сместить вывод.
for ($i=0; $i<$level; $i++) echo " ";
// Выводим текущий элемент.
echo "$e\n";
// Входим в текущий подкаталог и печатаем его
if (!chdir($e)) continue;
printTree($level+1);
// Возвращаемся назад
chdir("..");
// Отправляем данные в браузер, чтобы избежать видимости зависания
// для больших распечаток.
flush();
}
closedir($d);
}
// Выводим остальной текст фиксированным шрифтом
echo "<pre>";
echo "/\n";
// Входим в корневой каталог и печатаем его
chdir($_SERVER['DOCUMENT_ROOT']);
PrintTree();
echo "</pre>";
DirectoryIterator
Для элегантности можно использовать DirectoryIterator:
// Создаем новый объект DirectoryIterator
$dir = new DirectoryIterator("/my/directory/path");
// Цикл по содержанию директории
foreach ($dir as $item) {
echo $item . "<br>";
}
С помощью методов DirectoryIterator::isDot(), DirectoryIterator::getType() и DirectoryIterator::getSize(), можно получить информацию о директории.
Для рекурсивного обхода файловой системы можно использовать RecursiveDirectoryIterator:
// Создаем новый объект RecursiveDirectoryIterator
$iter = new RecursiveDirectoryIterator("/my/directory/path");
// Цикл по списку директории
// Нужно создать новый экземпляр RecursiveIteratorIterator
foreach (new RecursiveIteratorIterator($iter) as $item) {
echo $item . "<br>";
}
RecursiveDirectoryIterator не возвращает пустых директорий: если директория содержит много поддиректорий, но без файлов, результат будет пустым.
.
Прокомментировать/Отблагодарить