从PHP中的某些扩展名过滤的dir文件的最佳方法

时间:2011-12-16 23:01:14

标签: php filesystems

  

可能重复:
  PHP list of specific files in a directory
  use php scandir($dir) and get only images!

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

$dir_f = "whatever/random/";
$files = scandir($dir_f);
但是,它会检索目录中的每个文件。如何以最有效的方式仅检索具有特定扩展名的文件,例如.ini。

7 个答案:

答案 0 :(得分:62)

PHP具有很好的功能,可以帮助您仅捕获所需的文件。它叫glob()

  

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

以下是一个示例用法 -

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

参考 -

答案 1 :(得分:13)

如果您想要搜索多个扩展程序,则preg_grep()可以替代过滤:

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

虽然glob具有类似的额外语法。如果你有其他条件,添加~i标志不区分大小写,或者可以过滤组合列表,这通常是有意义的。

答案 2 :(得分:9)

PHP的glob()功能让您指定要搜索的模式。

答案 3 :(得分:5)

您可以尝试使用GlobIterator

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

答案 4 :(得分:2)

glob($pattern, $flags)

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

答案 5 :(得分:1)

尚未测试正则表达式,但是这样:

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

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

    closedir($handle);
}

答案 6 :(得分:0)

试试这个

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

}