Работа с содержимым директорий в PHP — важная задача, которая часто встречается в веб-разработке. PHP предоставляет удобные встроенные функции для этой цели. Рассмотрим их использование и особенности на примере.
Список содержимого директории
Для извлечения содержимого текущего каталога используем магическую константу __DIR__
, которая возвращает путь к директории файла, в котором она используется. Это значение передаем в функцию scandir()
для получения списка файлов и директорий.
$rootDir = __DIR__; // __DIR__ = C:\xampp\htdocs\CodeWall или любой другой путь к текущему каталогу
$allFiles = array_diff(scandir($rootDir), [".", ".."]); // Удаляем ссылки на текущий и родительский каталоги: (".", "..")
print_r($allFiles);
Результат:
Array ( [2] => css [3] => img [4] => index.php [5] => js [6] => page1.php [7] => page2.php )
Сортировка файлов в алфавитном порядке
Если необходимо получить список файлов в алфавитном порядке, можно использовать второй параметр функции scandir()
: 0
— по возрастанию (значение по умолчанию), 1
— по убыванию.
$rootDir = __DIR__;
$allFiles = array_diff(scandir($rootDir, 1), [".", ".."]);
print_r($allFiles);
Результат:
Array ( [0] => page2.php [1] => page1.php [2] => js [3] => index.php [4] => img [5] => css )
Начиная с версии PHP 5.4.0, для второго параметра функции scandir()
введены константы: SCANDIR_SORT_ASCENDING
(по возрастанию, по умолчанию), SCANDIR_SORT_DESCENDING
(по убыванию), SCANDIR_SORT_NONE
(без сортировки).
Вывод списка всех файлов, включая вложенные директории
Для вывода списка файлов текущей и вложенных директорий выполним следующие действия:
- Извлечем содержимое текущей директории.
- В цикле проверим все элементы массива, чтобы найти директории.
- Извлечем список файлов из найденных директорий.
Пример решения для одного уровня вложенности:
$rootDir = __DIR__;
$currentDirectoryItems = array_diff(scandir($rootDir), [".", ".."]);
$allFiles = [];
foreach ($currentDirectoryItems as $item) {
$allFiles[] = $item;
if (is_dir($rootDir . "/" . $item)) { // Проверяем, является ли элемент директорией
$allFiles[] = array_diff(scandir($rootDir . "/" . $item), [".", ".."]);
}
}
print_r($allFiles);
Результат:
Array (
[0] => page2.php
[1] => page1.php
[2] => js
[3] => Array ( [2] => bootstrap.js [3] => jquery-1.10.2.js )
[4] => index.php
[5] => img
[6] => Array ( [2] => img1.jpg [3] => img2.jpg )
[7] => css
[8] => Array ( [2] => Site.css [3] => bootstrap.css )
)
Заключение
Функция scandir()
значительно упрощает работу с содержимым директорий в PHP. Она позволяет легко извлечь список файлов и директорий, сортировать их и даже обрабатывать вложенные директории. Важно внимательно изучать документацию и использовать возможности PHP максимально эффективно.