Есть ли способ получить только изображения с расширениями 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; }
Вот простой способ получить только изображения. Работает с версией 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()
вернется .
и ..
а также файлы, поэтому приведенный выше код является более чистым, если вам просто нужны имена файлов, или вы хотите делать другие вещи с фактическими файловыми путями