从 php 中按特定扩展名过滤的目录获取文件的最佳方法


Best way to get files from a dir filtered by certain extension in php

可能的重复项:
目录中
特定文件的 PHP 列表 使用 PHP Scandir($dir( 并仅获取图像!

所以现在我有一个目录,我正在获得一个文件列表

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

但是,这将检索目录中的每个文件。我如何以最有效的方式仅检索具有特定扩展名的文件,例如.ini。

PHP 有一个很棒的功能来帮助你只捕获你需要的文件。它叫glob()

glob - 查找与模式匹配的路径名

返回

包含匹配文件/目录的数组,如果没有匹配的文件,则返回空数组,如果错误返回 FALSE。

下面是一个用法示例 -

$files = glob("/path/to/folder/*.txt");

这将使用与给定路径中的*.txt模式匹配的所有文件的列表填充 $files 变量。

参考-

  • glob()

如果要搜索多个扩展名,则preg_grep()是过滤的替代方法:

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

尽管glob具有类似的额外语法。如果您有其他条件、为不区分大小写添加 ~i 标志或可以筛选组合列表,这通常是有意义的。

PHP的glob()函数让你指定一个要搜索的模式。

您可以尝试使用GlobIterator

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

glob($pattern, $flags(

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

试试这个

//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
}

还没有测试正则表达式,但像这样:

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