Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Печать дерева каталогов файловой системы
Пример формирует дерево каталогов файловой системы на 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 не возвращает пустых директорий: если директория содержит много поддиректорий, но без файлов, результат будет пустым.
.
Прокомментировать/Отблагодарить