Подтвердить что ты не робот

Лучший способ получить файлы из каталога, отфильтрованного определенным расширением в php

Возможный дубликат:
Список конкретных файлов PHP в каталоге
используйте php scandir ($ dir) и получите только изображения!

Так что прямо сейчас у меня есть каталог, и я получаю список файлов

$dir_f = "whatever/random/";
$files = scandir($dir_f);

Это, однако, извлекает каждый файл в каталоге. Как я могу извлечь только файлы с определенным расширением, например .ini, наиболее эффективным способом.

4b9b3361

Ответ 1

PHP имеет отличную функцию, которая поможет вам захватывать только нужные вам файлы. Его называют glob()

glob - поиск путей, соответствующих шаблону

Вот пример использования -

$files = array();
foreach (glob("/path/to/folder/*.txt") as $file) {
  $files[] = $file;
}

Ссылка -

Ответ 2

PHP glob() функция позволяет указать шаблон для поиска.

Ответ 3

Если вы хотите найти более одного расширения, то preg_grep() является альтернативой фильтрации:

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

Хотя glob имеет аналогичный дополнительный синтаксис. Это имеет смысл, если у вас есть дополнительные условия, добавьте флаг ~i для нечувствительности к регистру или можете фильтровать комбинированные списки.

Ответ 4

Вы можете попробовать использовать GlobIterator

$iterator = new \GlobIterator(__DIR__ . '/*.txt', FilesystemIterator::KEY_AS_FILENAME);
$array = iterator_to_array($iterator);
var_dump($array)

Ответ 5

glob ($ pattern, $flags)

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . "\n";
}
?>

Ответ 6

попробуйте это

//path to directory to scan
$directory = "../file/";

//get all image files with a .txt extension.
$file= glob($directory . "*.txt ");

//print each file name
foreach($file as $filew)
{
echo $filew;
$files[] = $filew; // to create the array

}

Ответ 7

не тестировали регулярное выражение, но что-то вроде этого:

if ($handle = opendir('/file/path')) {

    while (false !== ($entry = readdir($handle))) {
        if (preg_match('/\.txt$/', $entry)) {
            echo "$entry\n";
        }
    }

    closedir($handle);
}