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

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