Есть ли способ получить только изображения с расширениями jpeg
, png
, gif
и т.д. при использовании
$dir = '/tmp';
$files1 = scandir($dir);
Есть ли способ получить только изображения с расширениями jpeg
, png
, gif
и т.д. при использовании
$dir = '/tmp';
$files1 = scandir($dir);
Вы можете использовать glob
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
Если вам нужно, чтобы это было нечувствительным к регистру, вы можете использовать DirectoryIterator
в сочетании с RegexIterator
или передать результат от scandir
до array_map
и использовать обратный вызов, который фильтрует любые нежелательные расширения. Используете ли вы strpos
, fnmatch
или pathinfo
, чтобы получить расширение, зависит от вас.
Фактический вопрос заключался в использовании scandir, и ответы заканчивались в glob. Существует огромная разница в обоих случаях, когда капля значительно тяжелая. Аналогичную фильтрацию можно выполнить с помощью scandir, используя следующий код:
$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
Надеюсь, это поможет кому-то.
Я просматривал файлы и просматривал их расширения:
$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;
}
closedir($dh);
Вот простой способ получить только изображения. Работает с версией 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);
Надеюсь, это полезно, если вы хотите расширения без учета регистра и изображений.
Вы можете искать полученный массив после этого и отбрасывать файлы, не соответствующие вашим критериям.
scandir
не имеет функции, которую вы ищете.
Если вы хотите сканировать каталог и возвращать имена файлов, вы можете использовать это:
$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob('./includes/*.{php}', GLOB_BRACE)
);
scandir()
вернет .
и ..
, а также файлы, поэтому приведенный выше код будет более чистым, если вам просто нужны имена файлов, или вы хотите делать другие вещи с фактическими файловыми путями