Apache вывести список файлов

Обновлено: 07.07.2024

Я установил сервер Apache в моей системе под управлением Ubuntu 14.04. Когда я набираю localhost или мой IP-адрес в браузере, он отображает страницу Apache. Вместо этой страницы мне нужно перечислить содержимое (папка / файлы) в каталоге /var/www . Как мне это настроить?

4 ответа

Необходимо удалить все файлы, которые имеют индекс на имя der. Например, index.html или index.php. Поскольку веб-сервер ищет это файлы и когда он находит некоторых, которые он отображает сайт вместо папки. И я думаю в более новых версиях Apache, основной сайт находится в/var/www/html. Поэтому удалите файл /var/www/html/index.html.

я надеюсь, что это помогает..

Самый простой путь состоит в том, чтобы переместить страницу приветствия. Две вещи:

  1. Apache на использовании Ubuntu 14.04 /var/www/html/ каталог по умолчанию, таким образом, можно или начать использовать тот каталог или изменить конфигурацию Apache для использования /var/www .
  2. страница по умолчанию /var/www/html/index.html . Переименуйте его к чему-то еще, как /var/www/html/apache-welcome.html .

, Когда каталог требуют, Apache может быть настроен для отправки конкретного файла в рамках того каталога автоматически. Это настроено с директивой DirectoryIndex. Это может перечислить один или несколько файлов, которые Apache должен искать в каталоге, при этом первый существующий файл возвращается клиенту. Например:

DirectoryIndex index.html index.htm index.php welcome.html

, Если точка запроса к каталогу, который не имеет формы файла DirectoryIndex, использование Apache mod_autoindex и может, возвращает список содержания каталога.

mod_autoindex может быть позволен/отключен с помощью директивы Опций. Например:

позволяют Apache возвращать содержание каталога /var/www , если он не делает содержит файл DirectoryIndex .

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

Так, необходимо проверить апачский конфигурационный файл и выбрать, какие Опции Вы хотите использовать и на который каталог.

Веб-сервер Apache предоставляет неплохие возможности, для того, чтобы приукрасить стандартный листинг файлов. Модуль mod_autoindex обладает достаточным для стилизации количеством директив. Ниже я приведу несколько примеров и расскажу, как сделать приятный на вид листинг.


Структура html страницы листинга выглядит следующим образом:

Данная структура поддается изменениям. Модуль mod_autoindex позволяет использовать свою разметку header и footer. Также вы можете вставить код подключения таблиц стилей (CSS) в стандартный header с помощью директивы IndexStyleSheet :


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


Если этого недостаточно, можно заменить стандартную разметку header на свою с помощью директивы HeaderName :

Обратите внимание, что весь код из вашего файла будет вставляться после тэга
Если же вы хотите полностью заменить header, необходимо добавить параметр +SuppressHTMLPreamble директиве IndexOptions .

Теперь ваш код должен содержать тэги

Рядом с названиями файлов располагаются пиктограммы, которые меняются в зависимости от расширения файла.
Вы можете указать Apache какие изображения использовать для определенных расширений с помощью директивы AddIcon


Свой код я вставил в файл /etc/apache2/sites-available/default

IndexOptions

  • +Charset (Меняет кодировку страницы)
  • +IgnoreCase (Сортировка без учёта регистра)
  • +FoldersFirst (Выводит сначала директории, затем остальные файлы)
  • +XHTML (Разрешает XHTML)
  • +HTMLTable (Выводит файлы в виде таблицы , иначе используются списки
    +SuppressRules (Не использовать тэги до и после списка файлов)
    +SuppressDescription (Не показывать столбец "Описание файла")

image

Таблицу стилей я использовал из проекта Apaxy. У меня получился вот такой результат:

image

Можно конечно сделать листинг с блэкджэком и барышнями навигацией на php, или например заменить структуру на что-нибудь более удобное с помощью jQuery, как здесь:

Список файлов и другие косяки
1. При входе на сайт на виртуальном хостинге выскакивает список файлов. Стоит apache 2.2.2.

Отображается список файлов вместо интерфейса
При вводе локально адреса отображается список файлов вместо интерфейса. Что ето может быть.

Как получить список директорий и список файлов в директории?
Очень нужно организовать поиск на диске. Как искать в нутри файла я знаю, а вот как искать вовсех.

FTP: получение списка файлов из потока. Как вывести список файлов из директории?
доброго времени суток. пытаюсь написать свой FTP-клиент. отправил серверу команду LIST, и в.

Объясните, как это указать ключ. Я просто новичек в этом. Если вас конечно не затруднит

Благодарю, сейчас попробую.

Добавлено через 5 минут
Вообщем у меня апатч настроен на несколько виртуальных хостов, а в конфиге апатча стоит вот так вот: <Directory "C:/AppServ/www">

Значит я так понял создать столько <Directory> сколько у меня виртуал хостов?

Не стоит бежать впереди паровоза.
Если несколько виртуальных хостов, да еще и они работают, то есть где-то несколько конфигов этих самых виртуальных хостов. Нужно узнать, где по умолчанию живут эти конфиги, и уже в них рулить опциями для соответствующих папок. В противном случае, добавляя в основной конфиг записи про директории виртуальных хостов вы получите конфликт и не стартующий апач. Как узнать где живут конфиги виртуальных хостов - по идее они расположены в "специальной" папке. Конфиги из нее включаются в основной конфиг директивой наподобие
Include conf.d/*.conf
(conf.d - это имя папки (в моем случае) где живут конфиги виртуальных хостов). Находите эту папку, в ней находите конфиг соответствующего виртуал-хоста, а в нем уже для директория ставите "минус индексы". После этого апач нужно перезапустить.

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

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

Для предметного обсуждения решения и демонстраций предположим, что структура директорий имеет следующий вид:

Базовые решения

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

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

Первое решение базируется на использовании функции glob(), которая позволяет выполнять поиск пути с помощью шаблонов. Функция имеет два параметра:

  • $pattern (обязательный): шаблон поиска
  • $flags (опциональный): один или несколько флагов, описание которых можно найти в документации

Рассмотрим примеры. Для поиска в директории всех файлов и директорий, имена которых заканчиваются на .txt, следует использовать код:

Если вывести переменную $filelist , то получим:

Если нужен список файлов и директорий, имена которых начинаются на “te”, то код будет выглядеть так:

А вывод имеет вид:

А для получения списка только директорий с именами, содержащих “ma”, используем код:

Последний пример выведет:

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

Используем opendir() , readdir() , и closedir() .

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

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

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

Ниже приведенный пример возвращает список имен файлов и директорий начинающихся на “te”:

При выполнении выше приведенного кода, переменная $entry будет содержать такие включения, как “.” и “..”. Это две виртуальные директории, которые имеются в каждом каталоге файловой системы. Они представляют текущий каталог и родительский каталог соответственно.

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

Пример выдаст следующее:

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

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

Данный пример показывает, как получить список файлов и каталогов, имена которых начинаются на “te”:

Воспользуемся итераторами SPL

Теперь рассмотрим использование итераторов SPL. Но прежде, чем приступить к решению нашей задачи, проведем введение в библиотеку SPL и итераторы. Библиотека SPL предоставляет серию классов для объектно ориентированных структур данных, итераторов, дескрипторов файлов и прочее.

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

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

Как уже сообщалось во водной части урока, мы рассмотрим использование FilesystemIterator , RecursiveDirectoryIterator и GlobIterator . Первый наследуется от DirectoryIterator , а остальные от FilesystemIterator . Они все имеют один и тот же конструктор, который принимает два параметра:

  • $path (обязательный): путь к пункту файловой системы, над которым совершаются операции
  • $flags (опциональный): один или несколько флагов, перечисленных в документации

Реальное различие в данных итераторах заключается в их использовании для навигации по заданному пути.

FilesystemIterator

Использовать FilesystemIterator очень просто. Рассмотрим в действии. Представляем два примера. Первый показывает поиск всех файлов и каталогов, имена которых начинаются на “te”. Второй пример использует другой итератор RegexIterator для поиска всех файлов и каталогов, имена которых заканчиваются на “t.dat” или “t.php”. Итератор RegexIterator используется для фильтрации результата на основе регулярных выражений.

Выше приведенный код выдаст результат, аналогичный предыдущим примерам.

Второй пример с применением RegexIterator :

Он будет выводить:

RecursiveDirectoryIterator

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

GlobIterator

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

Заключение

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

  • Функция glob() является встроенным решением, но она недостаточно гибкая.
  • Решение на основе opendir() , readdir() , и closedir() более сложное и требует дополнительной фильтрации, но оно более гибкое.
  • Функция scandir() требует дополнительной фильтрации, но работает без обработки дескриптора.
  • Если вы используете подход ООП, то следует применять библиотеку SPL. Дополнительно вы можете расширить классы своим функционалом.
  • Итератор GlobIterator имеет функцию предварительной фильтрации, а другие используют RegexIterator .

5 последних уроков рубрики "PHP"

Фильтрация данных с помощью zend-filter

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

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

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

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

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