Лучший способ получить файлы из каталога, отфильтрованного определенным расширением в php
Возможный дубликат:
Список конкретных файлов PHP в каталоге
используйте php scandir ($ dir) и получите только изображения!
Так что прямо сейчас у меня есть каталог, и я получаю список файлов
$dir_f = "whatever/random/";
$files = scandir($dir_f);
Это, однако, извлекает каждый файл в каталоге. Как я могу извлечь только файлы с определенным расширением, например .ini, наиболее эффективным способом.
Ответы
Ответ 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);
}