Вывод каталогов рекурсивно

Дерево всех файлов php

Nickolay.info. PHP. Построение дерева каталогов на PHP 5 и PHP 4

В PHP5 появилась функция scandir , получающая список файлов и каталогов, расположенных по указанному пути. Применение этой функции плюс рекурсии позволяет легко написать скрипт для построения дерева каталогов на PHP:

 return $c; > function getsize ($bytes) < if ($bytes<1024) return $bytes.' байт'; else if ($bytes<1048576) return round ($bytes/1024,2).' Кб'; else if ($bytes<1073741824) return round ($bytes/1048576,2).' Мб'; else return round ($bytes/1073741824,2).' Гб'; >function showdir($folder,$begin) < $files = scandir($folder); foreach($files as $file) < if ($file=='.' or $file=='..') continue; $f0=$folder.'/'.$file; if (is_dir($f0)) < echo ''.$begin.$file.''.$begin.getsize(sizedir($folder.'/'.$file)).''."\n"; showdir($f0,$begin.'  '); > > > echo '   '; $dir='./'; echo ''."\n"; //echo ''; showdir($dir,''); echo '
.'.getsize(sizedir($dir)).'
'; echo ''; ?>

Скрипт может выполняться довольно долго, если в папке $dir много вложенных папок и файлов (в примере дерево смотрится от корня сервера!). Для «симметричности» всё выводится моноширинным шрифтом Courier New , а чтобы избежать огромных чисел (размеры папок-то считаются в байтах), метод getsize переводит размер в байтах в Кб или Мб, оставляя байты только для файлов меньше 1 Кб.

Если нужно дополнительно показать размер самой папки $dir , от которой строится дерево, раскомментарьте одну строчку в листинге:

Если нужно, чтобы работало на PHP4, можно просто добавить в листинг свою scandir :

Пример того, что построил скрипт для небольшой папки на локалхосте:

Источник

Дерево всех файлов php

Для вывода всего дерева директорий и файлов. нам потребуется отсортировать папки отдельно — файлы отдельно!

Вчера специально посмотрел в интернете — есть ли вообще, что-то похожее на нормальное дерево всех файлов на сайте! Оказалось, как часто бывает — какой-то полный отстой!

Поэтому, я напишу всё самостоятельно, раз нет готового решения.

Но первым шагом. нам нужно подготовить почву для сортировки и выводу всего дерева директорий, поддиректорий и файлов!

Сперва получим все папки первого уровня с помощью scandir:

После удаления восстановим нумерацию

Поскольку отсортировать отдельно названия папок и файлов простым способом не получится — сделаем это с помощью цикла.

Сортировка всех папок и файлов сайта для дерева.

После того, как мы подготовили массив для цикла

Выше цикла поставим создание двух массивов в цикле. один с папками($new_array), другой с файлами($new_array2):

Внутри цикла создадим условие, каждая новая строка с новым расширением, все расширения какие вспомнил в этом условии, не буду выводить все строки. Как добавить . если у вас есть како-то новое разрешение, просто копируйте любую строку(кроме последней(там отсутствует «or») в условии, измените разрешение и вставьте в условие.

if(
substr_count( $array[$i] , ‘.dat’) or
.
substr_count( $array[$i] , ‘.xml’) or
substr_count( $array[$i] , ‘.htaccess’))
$new_array2[] = $array[$i];
>

Папки :

Что не попало в первый массив попадет во второй(так, что не беспокойтесь, файлы выведутся все!):

И в самом конце вернем(return) соединим получившиеся два массива с помощью array_merge , вначале папки($new_array):

Вторая функция для создания дерева директорий и файлов.

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

И в том числе в цикле foreach
Короче.

Данная функция проберется по всем каталогам вашего сайта и выведет всё, что у вас есть на сайте!

Я думаю — этого будет достаточно для описания этой функции.

Да. И редкий случай, когда применил тег details(это один из вариантов — открыть/скрыть блок, только на html) — посмотрим, что из этого получится.

Живой пример вывода всего дерева папок и файлов сайта

Стили. думаю рассказывать вообще смысла нет, как получилось. так получилось.

Живой пример вывода всего дерева сайта. Естественно, что дерево всего сайта https://dwweb.ru я вам не покажу, у меня есть для таких целей поддомен. Разместим весь код php + html + css в файле «index.php»

Как пользоваться функцией построения дерева файлов и папок?

Всё содержимое архива, бросаем в любое место вашего сайта.

И видим, что мы получили дерево файлов и папок:

Как пользоваться функцией построения дерева файлов и папок?

Обозначения дерева файлов и папок?

Если цвет синий — значит папка закрытая.

Если цвет коричневый — папка открыта.

Если видите знак ✖ — это файл, конечная точка дерева.

Источник

Дерево директории на PHP

Дерево директории на PHP

Недавно меня попросили написать скрипт, который выводит дерево директории на PHP. Я решил, что это будет интересно многим, поэтому написал подобный скрипт, который сейчас продемонстрирую.

function showTree($folder, $space) /* Получаем полный список файлов и каталогов внутри $folder */
$files = scandir($folder);
foreach($files as $file) /* Отбрасываем текущий и родительский каталог */
if (($file == ‘.’) || ($file == ‘..’)) continue;
$f0 = $folder.’/’.$file; //Получаем полный путь к файлу
/* Если это директория */
if (is_dir($f0)) /* Выводим, делая заданный отступ, название директории */
echo $space.$file.»
«;
/* С помощью рекурсии выводим содержимое полученной директории */
showTree($f0, $space.’  ‘);
>
/* Если это файл, то просто выводим название файла */
else echo $space.$file.»
«;
>
>
/* Запускаем функцию для текущего каталога */
showTree(«./», «»);
?>

Код тщательно прокомментирован, поэтому вопросов возникнуть не должно. Как видите, всё построено вокруг рекурсии, и каждый каталог рекурсивно обследуется. А когда полностью обследован (а также все его подкаталоги), то возвращаемся в цикл и двигаемся дальше. Такой процесс происходит абсолютно с каждым каталогом, который попадается на пути.

Я Вам предлагаю найти у себя на компьютере сайт, где много директорий, поддиректорий и файлов и испытать данный PHP-скрипт, построив дерево корневой директории.

Создано 04.11.2011 13:23:02

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 18 ):

    Классный скрипт, вот только почему-то скан доходит только до первой глубины вложенности каталогов, а подкаталаги уже не сканирует(

    Поменяйте строку if (is_dir($file)) на if (is_dir($f0)) и будет Вам счастье!

    Спасибо большое! Подправил.

    А может вы всё-таки напишите скрипт древовидных комментариев ? Или вы не хотите писать потому что есть статья?

    Нет, пока писать скрипт времени нет.

    Ясно, а в будушем напишите?

    Мне тоже интересно узнать, как выводить древовидные комментарии, т.е. как у вас, при использовании кнопки/ссылки «Ответить» рядом с комментарием. С добавлением комментария — проблем никаких, как и с выводом; вот что я действительно не могу понять, как заставить комментарий «сместиться» в сторону, при помощи PHP.

    Это не при помощи PHP, а при помощи CSS. А PHP лишь генерирует соответствующий HTML-код, который ничего не смещает сам по себе.

    То есть, нужно заранее написать стиль для смещения, и шаблон, в который PHP будет загружать комментарий, и присваивать соответствующий стиль? Или же нужен всего один стиль, а при помощи PHP мы должны вставить шаблон комментария перед закрывающим тегом, чтобы получились древовидные комментарии? Я правильно вас понимаю? Если нет, тогда я в отчаянии. 🙂

    Источник

    Дерево файлов и директорий

    Напишем простой скрипт, с помощью которого можно реализовать вывод дерева файлов и директорий.

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

    Работа скрипта подробно объяснена в комментариях к коду:

    function viewTree( $folder, $space ) < // Получаем полный список файлов и каталогов внутри $folder $files = scandir( $folder ); foreach( $files as $file ) < // Отбрасываем текущий и родительский каталог if ( ( $file == '.' ) || ( $file == '..' ) ) continue; // Получаем полный путь к файлу $path = $folder.'/'.$file; // Если это директория if ( is_dir( $path ) ) < // Выводим название директории, делая заданный отступ echo ''.$space.$file."
    "; // С помощью рекурсии выводим содержание полученной директории viewTree( $path, $space.'  ' ); > // Если это файл, то просто выводим название файла else < echo $space.$file."
    "; > > > // Запускаем функцию для текущего каталога viewTree( $_SERVER['DOCUMENT_ROOT'].'/', '' );
    А ещё по теме
    Написание своего плагина для WordPress. Часть 4. Защита плагина с помощью nonce

    В предыдущих частях были описаны создание страницы плагина в админ панели и работа с базой…

    Функция Feof

    Функция Feof проверяет, достигнут ли конец файла. bool feof( resource $handle ) Параметр Handle являет…

    Функция Decbin

    Функция Decbin переводит число из десятичной системы счисления в двоичную. string decbin( int $number )…

    Преобразование байтов в килобайты, мегабайты, гигабайты, терабайты

    Очень часто необходимо преобразовать какую-то величину (размер файла, памяти) в человеческий вид. Значение 1 Гб…

    Двоичные данные (Boolean)

    Тип Boolean выражает истинность значения. Он может быть либо TRUE, либо FALSE. Обе они регистронезависимы.…

    Директива Upload_max_filesize

    Директива Upload_max_filesize задает максимальный размер закачиваемого файла. upload_max_filesize integer Значение директивы измеряется байтами. Также доступны…

    Источник

    Читайте также:  Прогресс бар в питоне
    Оцените статью