Для быстрого поиска файлов в заданной директории берем PHP функцию glob(), которая в свою очередь вернет нам список файлов по заданной в нее маске.
$listFile = glob("directory/*.jpg")
В передаваемой функции маске можно использовать следующие символы:
* | Соответствует нулю или большему количеству любых символов. |
? | Один любой символ. |
[...] | Один символ входящий в группу. |
[!...] | Один символ не входящий в группу. |
[...,...] | Вхождение подстрок, работает с флагом GLOB_BRACE . |
\ | Экранирует следующий символ, кроме случаев, когда используется флаг GLOB_NOESCAPE . |
Флаги, которые можно передать в функцию вторым значением, разделяя их вертикальной чертой |
GLOB_MARK | Добавляет слеш к каждой возвращаемой директории. |
GLOB_NOSORT | Возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту. |
GLOB_NOCHECK | Возвращает шаблон поиска, если с его помощью не был найден ни один файл. |
GLOB_NOESCAPE | Обратные слеши не экранируют метасимволы. |
GLOB_BRACE | Раскрывает {a,b,c} для совпадения с «a », «b » или «c ». |
GLOB_ONLYDIR | Возвращает только директории, совпадающие с шаблоном. |
GLOB_ERR | Останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются. |
Использование одного или нескольких флагов передаваемых в функцию glob()
$listFile = glob("directory/*.jpg', GLOB_NOSORT|GLOB_ERR);
Поиск всего что есть в директории
$directory = __DIR__ . '/directory'; $listFiles = []; foreach(glob($directory . '/*') as $file) { $listFiles[] = basename($file); } print_r($listFiles);
Результат будет примерно таким:
Array ( [0] => 1.jpg [1] => 2.jpg [2] => 3.gif [3] => 4.svg [4] => img.png [5] => vendor [6] => product.png [7] => style.css [8] => script.js )
Чтобы найти только файлы, используем внутри цикла конструкцию if-else в которой проверяем существование файла посредством функции is_file(). Аналогичным образом проверяем существование директории is_dir().
Таким образом мы сможем вывести только файлы или только директории, либо отсортировав их по разным массивам вывести их отдельно.
Ищем только файлы
$directory = __DIR__ . '/directory'; $files = []; foreach(glob($directory . '/*') as $file) { if (is_file($file)) { $files[] = basename($file); } } print_r($files);
Ищем только директории
$directory = __DIR__ . '/directory'; $dirs = []; foreach(glob($directory . '/*') as $dir) { if (is_dir($file)) { $dirs[] = basename($dir); } } print_r($dirs);
Поиск файлов по нескольким расширениям
Указывая {jpg,png} мы ищем файлы с расширением jpg и png
$directory = __DIR__ . '/directory'; $files = array(); foreach(glob($directory . '/*.{jpg,png}', GLOB_BRACE) as $file) { $files[] = basename($file); } print_r($files);
Поиск файла по имени
Указывая images*.* мы ищем файл название которого начинается с images
$directory = __DIR__ . '/directory'; $files = array(); foreach(glob($directory . '/images*.*', GLOB_BRACE) as $file) { $files[] = basename($file); } print_r($files);
Указывая [0-9] мы ищем файл название которого начинается с цифр
$directory = __DIR__ . '/directory'; $files = array();
foreach(glob($directory . '/[0-9]*.*', GLOB_BRACE) as $file) {
$files[] = basename($file); } print_r($files);