Как сделать список файлов на сайте

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

В PHP пятой версии есть отличная функция scandir, которая возвращает массив файлов и директорий в определенной директории. В качестве параметра принимает имя директории.

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

scandir принимает 2 параметра: string directory — имя директории (обязательный), integer sorting_order — необязательный параметр сортировки (два возможных значения: 0 — в алфавитном порядке по возрастанию; 1 — по убыванию).

. [1] => .. [2] => bar.php [3] => foo.txt [4] => somedir ) Array ( [0] => somedir [1] => foo.txt [2] => bar.php [3] => .. [4] => . ) */ ?>

Улучшаем scandir

Напишем свою функцию myscandir , которая идентична scandir за исключением того, что удаляются . и .. , которые, как мне кажется, редко используются.

myscandir

Примечание

Для работы этой функции нужна 5ятая версия PHP.

Категории

Комментарии

мне казалось легче использовать array_pop(): или array_shift(); - в зависимости от расположения точек

Листинг директорий - это получение информации о каталогах и файлах для заданной родительской директории, а также возможность применить к этим данным различные фильтры для коррекции вывода.

Базовые решения
Первый набор примеров использует функции glob() и комбинации функций opendir(), readdir(), closedir(), а также функцию scandir().

Использование glob()

  • $pattern (обязательный): строка шаблона поиска
  • $flags (не обязательный): один или несколько флагов
    • GLOB_MARK - Добавляет слеш к каждой возвращаемой директории.
    • GLOB_NOSORT - Возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту.
    • GLOB_NOCHECK - Возвращает шаблон поиска, если с его помощью не был найден ни один файл.
    • GLOB_NOESCAPE - Обратные слеши не экранируют мета символы.
    • GLOB_BRACE - Раскрывает для совпадения с 'a', 'b' или 'c'.
    • GLOB_ONLYDIR - Возвращает только директории, совпадающие с шаблоном.
    • GLOB_ERR - Останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются.

    В последнем примере использован флаг GLOB_ONLYDIR в качестве второго аргумента функции. Поэтому в список попала, только директория "User" в имени, которой встречается "er". Функция glob() очень проста в использовании, но иногда она недостаточно гибкая. Нет флага для получения только файлов (без директорий), которые соответствуют шаблону.

    Использование opendir(), readdir(), и closedir().

    Следующий метод получения списка файлов и директорий, заключается в использовании PHP функций opendir(), readdir() и closedir().

    Функция opendir() возвращает дескриптор открытой директории. После того как дескриптор получен, можно использовать функцию readdir(). При обращении к дескриптору функция readdir() выдает имя следующего файла или директории. Если все элементы содержащиеся в дескрипторе уже были перечислены, функция readdir() вернет false. Для закрытия дескриптора используем функцию closedir().

    В отличие от использования php функции glob(), данный подход немного сложнее. Отсутствует возможность задать параметры фильтрации, которые помогают заранее формировать список возвращаемых имен файлов и директорий. Для получения необходимого списка файлов и директорий, фильтрацию должна быть выполнена самостоятельно.


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

    Использование scandir().

    Для завершения посмотрим пример использования php функции scandir(). У нее есть только один обязательный атрибут - путь к директории для чтения. Результатом работы функции является массив файлов и директорий, расположенных по заданному в аргументе пути. Как и в предыдущем примере для получения отфильтрованного списка файлов и директорий необходимо выполнить ее самостоятельно. Визуально решение получается более коротким и не требуется управление дескрипторами.


    Пример показывает, как получить список файлов и каталогов, имена которых начинаются на "te": В выводе получим такой результат:

    Продвинутое решение c использованием PHP SPL
    Более надежное решение с применением SPL итераторов FilesystemIterator, RecursiveDirectoryIterator и GlobIterator.

    Использование итераторов SPL.

    Рассмотрим использование итераторов SPL. До того как приступить к решению задачи, немного познакомимся с php библиотекой SPL и итераторами. SPL библиотека предоставляет из себя специализированные наборы классов для объектно ориентированных структур данных, итераторов, дескрипторов файлов и прочее.

    Основное преимущество итераторов заключается в том, что они являются классами и их можно расширить используя стандартный механизм php наследования классов. Еще один плюс заключается в том, что итераторы имеют собственные методы, которые могут быть полезны при решении типовых задач и все они расположены в одном месте. Посмотрим на примере использования FilesystemIterator и сравним с readdir(). Оба метода используют цикл, но в случае readdir() получится обрабатывать только строку, а FilesystemIterator может работать с объектом. В котором может содержатся дополнительная информацию о файле или директории такие как владелец, размер, права доступа и так далее.

    Разумеется у PHP есть возможности для получения этой информации с помощью функций, filesize(), fileowner() и других. Но PHP как и любой язык программирования имеет свойства меняться. В PHP5 все больше прослеживается стремление задействовать концепции ООП. Поэтому лучше использовать современные методы работы с языком программирования.

    Рассмотрим использование FilesystemIterator, RecursiveDirectoryIterator и GlobIterator. Первый итератор наследуется от DirectoryIterator, а остальные от FilesystemIterator. Все они имеют один и тот же конструктор, который принимает два аргумента:

    • $path (обязательный): путь к пункту файловой системы, над которым совершаются операции
    • $flags (не обязательный): один или несколько флагов
      • FilesystemIterator::CURRENT_AS_PATHNAME Заставляет метод FilesystemIterator::current() вернуть путь.
      • FilesystemIterator::CURRENT_AS_FILEINFO Заставляет метод FilesystemIterator::current() вернуть экземпляр SplFileInfo.
      • FilesystemIterator::CURRENT_AS_SELF Заставляет метод FilesystemIterator::current() вернуть $this (FilesystemIterator).
      • FilesystemIterator::CURRENT_MODE_MASK Маскирует FilesystemIterator::current()
      • FilesystemIterator::KEY_AS_PATHNAME Заставляет метод FilesystemIterator::key() вернуть путь.
      • FilesystemIterator::KEY_AS_FILENAME Заставляет метод FilesystemIterator::key() вернуть имя файла.
      • FilesystemIterator::FOLLOW_SYMLINKS Заставляет метод RecursiveDirectoryIterator::hasChildren() следовать символическим ссылкам.
      • FilesystemIterator::KEY_MODE_MASK Маскирует FilesystemIterator::key()
      • FilesystemIterator::NEW_CURRENT_AND_KEY Тоже, что FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::CURRENT_AS_FILEINFO.
      • FilesystemIterator::SKIP_DOTS Пропускает точечные файлы (. and ..).
      • FilesystemIterator::UNIX_PATHS Заставляет все пути использовать обратный слеш в Unix-стиле, независимо от настроек системы по умолчанию.

      FilesystemIterator

      Использовать FilesystemIterator очень просто.
      Пример показывает поиск всех файлов и каталогов, имена которых начинаются на "te".

      Пример использования другого итератора RegexIterator для поиска всех файлов и каталогов, имена которых заканчиваются на "t.js" или "t.php". Итератор RegexIterator используется для фильтрации результата и использует механизм регулярных выражений.

      RecursiveDirectoryIterator

      Итератор RecursiveDirectoryIterator обеспечивает интерфейс для рекурсивного прохода по директориям файловой системы. Он имеет несколько полезных методов, таких как getChildren() и hasChildren(), которые возвращают итератор для текущего места, если это директория, и проверяют, является ли текущая точка входа директорией.


      Пример демонстрирует использование RecursiveDirectoryIterator и getChildren(). В выводе получим такой результат в данном случае - это файл из директории "User":

      GlobIterator

      Итератор GlobIterator выполняет проход по файловой аналогично функции glob(). Первый атрибут может включать шаблон имени.


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

      Заключение

      В приведенных выше примерах были рассмотрены различные методы PHP для достижения одной и той же цели: получение списка файлов и директорий.






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

      Функция scandir получает список файлов и каталогов, расположенных по указанному пути.

      В результате мы получим массив со всеми файлами и директориями.

      1. directory — строка, путь к директории из которой мы хотим получить список файлов
      2. sorting_order — необязательный параметр, целое число, указывающий как будет отсортирован наш список, по умолчанию отсортирован в алфавитном порядке.

      Давайте рассмотрим пример.

      Создадим файл и поместим в него следующий, код:

      Сохраним и перейдем на этот файл:

      вывод списка файлов и категорий в алфавитном порядке, используя функцию scandir

      Как видим мы получили список файлов в алфавитном порядке.

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

      Сегодня я хочу рассказать вам о разнообразных ситуациях, в которых требуется загрузка файлов на сайт с помощью PHP-скриптов . Постараюсь привести примеры, как самой простой загрузки файла, так и мультизагрузки с применением move uploaded file PHP .


      Простая загрузка файлов на сайт при помощи PHP

      Вам не составит труда написать собственный PHP-скрипт для загрузки файлов на сервер. Прежде всего, нужно создать HTML-форму с полем file input . Затем привязать к ней PHP-скрипт , который переместит файл в указанную директорию. Чтобы закачать файл на сервер с помощью PHP-скрипта , выполните следующие действия:

      Читайте также: