Справочники, инструменты, документация

PHP: Как получить только изображения с помощью scandir

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

Для получения списка файлов и директорий по определенному критерию нужно выполнить дополнительную фильтрацию. С другой стороны, решение получается более кратким и не требует управления дескрипторами.

Фильтрация с помощью scandir():

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));

Вы можете использовать glob:

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);

Пройтись по файлам и посмотреть на их расширения:

$dir = '/tmp';
$dh = opendir($dir);
while (false !== ($fileName = readdir($dh))) {
 $ext = substr($fileName, strrpos($fileName, '.') + 1);
 if(in_array($ext, array("jpg","jpeg","png","gif")))
 $files1[] = $fileName;
}

Работает с версией PHP > = 5.2 . Коллекция расширений написана в нижнем регистре, поэтому использование расширения файла в цикле в нижнем регистре делает его нечувствительным к регистру. Это полезно, если вы хотите отобразить нечувствительные к регистру и только расширения изображений.

// image extensions
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp');

// init result
$result = array();

// directory to scan
$directory = new DirectoryIterator('/dir/to/scan/');

// iterate
foreach ($directory as $fileinfo) {
 // must be a file
 if ($fileinfo->isFile()) {
 // file extension
 $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
 // check if extension match
 if (in_array($extension, $extensions)) {
 // add to result
 $result[] = $fileinfo->getFilename();
 }
 }
}
// print result
print_r($result);

Если вы хотите сканировать каталог и возвращать только имена файлов:

$fileNames = array_map(
 function($filePath) {
 return basename($filePath);
 },
 glob('./includes/*.{php}', GLOB_BRACE)
);

scandir() вернет . и .. , а также файлы, поэтому приведенный выше код будет чище, если вам просто нужны имена файлов или вы хотите сделать другие вещи с фактическими путями файлов.