<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру 3.0

PHP и MySQL с Нуля до Гуру 3.0

Данный курс научит Вас программировать на самом популярном Web-языке в мире - PHP. Курс состоит из 9 разделов, в которых с нуля рассказывается и показывается процесс написания различных скриптов на PHP.

В курсе Вы узнаете всю необходимую теоретическую часть, а также увидите массу практических примеров, в том числе, и из моей практики.

В Бонусе «Создание сайта для библиотеки» Вы увидите применение знаний из основного курса при создании полноценного проекта.

Просмотрев данный курс, Вы сможете создавать абсолютно любые PHP-сайты любой сложности.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

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

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Дерево директории на 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."<br />";
        /* С помощью рекурсии выводим содержимое полученной директории */
        showTree($f0, $space.'&nbsp;&nbsp;');
      }
      /* Если это файл, то просто выводим название файла */
      else echo $space.$file."<br />";
    }
  }
  /* Запускаем функцию для текущего каталога */
  showTree("./", "");
?>

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

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

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

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

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

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

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

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

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

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

sync.o sync.o 10.11.2011 10:42:19

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

Ответить

yurfact yurfact 15.12.2011 17:21:42

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

Ответить

Admin Admin 15.12.2011 17:44:35

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

Ответить

malina95 malina95 12.08.2012 20:13:29

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

Ответить

Admin Admin 12.08.2012 21:32:10

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

Ответить

malina95 malina95 13.08.2012 16:39:15

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

Ответить

Admin Admin 13.08.2012 21:20:17

Посмотрим.

Ответить

Alexander Alexander 09.04.2013 20:08:47

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

Ответить

Admin Admin 09.04.2013 21:10:51

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

Ответить

Alexander Alexander 10.04.2013 13:59:12

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

Ответить

Admin Admin 10.04.2013 15:16:38

<ul> <li>Комментарий<ul><li>Ответ<ul><li>Ещё ответ</li></ul></li></ul></li></ul> - вот древовидные комментарии, и у каждого ul должен быть margin-left. Вот такую структуру надо генерировать на PHP, задача непростая, требуется рекурсия. Без хороших знаний точно не обойтись.

Ответить

Alexander Alexander 10.04.2013 17:04:53

Понятно. Спасибо.

Ответить

Олег Олег 10.09.2013 14:16:57

Здравствуй Михаил! У меня код: <ul> <li>%menu% </li> </ul> где <li>%menu% </li> представляет собой: <h1>%title%</h1><ul><li><a href = "%link%">%titlearticle%</a> </li></ul> Подскажи пожалуйста направление мысли, в части написания кода, и оптимального составления таблицы в базе. Я хочу написать скрипт, где будет генерироваться некоторое количество <li> внешнего уровня, а внутри будет также генерироваться <h1>общий для некоторого количества внутренних <li>, которые в свою очередь, тоже будут генерироваться. То есть по русски будет список с названиями разделов, и каждому разделу будет принадлежать несколько ссылок подразделов

Ответить

Admin Admin 11.09.2013 17:50:00

Всё стандартно в подкатегориях просто добавляете поле с указанием id родительской категории и так далее.

Ответить

master_z1zzz master_z1zzz 16.05.2015 15:03:34

Добрый день, Михаил. Спасибо за хороший скрипт. Одна только проблема. Файлы в каталоге выводятся не так как надо, не пойму, они или по дате выводятся или по типу? У меня выводятся бардаком, нельзя ли как-то их по полочкам разложить, что б из директории выводились сперва под-категории, а потом файлы, а то сейчас всё вперемешку.

Ответить

ivan5555 ivan5555 10.08.2016 15:54:32

$files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING); вывод по алфавиту. sorting_order По умолчанию, сортировка производится в алфавитном порядке по возрастанию. Если необязательный параметр sorting_order установлен в значение SCANDIR_SORT_DESCENDING, сортировка производится в алфавитном порядке по убыванию. Если же он установлен в значение SCANDIR_SORT_NONE, то сортировка не производится.

Ответить

ivan5555 ivan5555 10.08.2016 12:42:18

Поднаточил скрипт немного -добавил подсказку около названии директории, что это не файл, заменил тупые пробелы на тире, чтобы по их количеству виден был уровень вложенности. Код: <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title></title> </head> <body alink="#000088" bgcolor="#FFFFFF" link="#0000FF" text="#000000" vlink="#FF0000"> <?php error_reporting(E_ALL ^ E_NOTICE); ini_set('display_errors', 1); echo " <h1>Дерево директорий и файлов:</h1><br><br>"; function showTree($folder, $space) { // Получаем полный список файлов и каталогов внутри $folder $files = scandir($folder, $sorting_order = SCANDIR_SORT_ASCENDING); foreach($files as $file) { //Преобразуем спецсимволы в именах в штмл-сущности: $file = htmlspecialchars($file, ENT_NOQUOTES | ENT_SUBSTITUTE,'UTF-8'); // Отбрасываем текущий и родительский каталог if (($file == '.') || ($file == '..')) continue; $f0 = $folder.'/'.$file; //Получаем полный путь к файлу // Если это директория if (is_dir($f0)) { // Выводим, делая заданный отступ, название директории echo $space.$file."&nbsp;&nbsp;<b><font color=\"#cc0000\">&lt;DIR&gt;</font></b><br>"; // С помощью рекурсии выводим содержимое полученной директории showTree($f0, $space.'-'); } // Если это файл, то просто выводим название файла else echo $space.$file."<br>"; } } // Запускаем функцию для текущего каталога showTree("./", ""); ?> </body> </html>

Ответить

ivan5555 ivan5555 10.08.2016 12:45:01

Странно, почему все строки в комментах валятся в кашу ? Как форматировать комментарии?

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.