Структура каталогов — Как получить только изображения с помощью Scandir в PHP?

Есть ли способ получить только изображения с расширениями jpeg, png, gif и т. д. при использовании

$dir    = '/tmp';
$files1 = scandir($dir);

36

Решение

Ты можешь использовать glob

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

Если вам нужно, чтобы это было без учета регистра, вы можете использовать DirectoryIterator в сочетании с RegexIterator или же передать результат scandir в array_map и использовать обратный вызов, который фильтрует любые нежелательные расширения. Используете ли вы strpos, fnmatch или же pathinfo получить продление зависит от вас.

81

Другие решения

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

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

Надеюсь, это кому-нибудь поможет.

31

Я бы перебрал файлы и посмотрел их расширения:

$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;
}
13

Вот простой способ получить только изображения. Работает с 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);

Я надеюсь, что это будет полезно, если вы хотите, чтобы регистр не учитывал регистр и только изображения.

10

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

scandir не имеет той функциональности, которую вы ищете.

6

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

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

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

2
По вопросам рекламы [email protected]