扫描目录并获取PHP中的所有文件

时间:2016-09-02 13:56:21

标签: php scandir

我的问题是,我有4个目录:

/dir1/
/dir2/
/dir3/
/dir4/

可能包含任意数量的子目录,例如:

    /dir1/
       /subdir1/
       /subdir2/

    /dir2/
       /subdir1/
       /subdir2/
       /subdir3/

    /dir3/
       /subdir1/

    /dir4/
       /subdir1/
       /subdir2/
       /subdir3/

这些子目录可以包含任意数量的.txt文件,例如:

/dir1/
   /subdir1/
      /1.txt
      /2.txt
   /subdir2/
      /1.txt

    /dir2/
       /subdir1/
          /1.txt
       /subdir2/
          /1.txt
          /2.txt
       /subdir3/
          /1.txt

    /dir3/
       /subdir1/
          /1.txt
          /2.txt

    /dir4/
       /subdir1/
          /1.txt
       /subdir2/
          /1.txt
       /subdir3/
          /1.txt
          /2.txt
          /3.txt

问题是以自动方式找到这些.txt文件。

Impartant:目前只有2个级别的目录,如上所示。 我设法到目前为止:

/Applications/MAMP/htdocs/test/public/dir1/.
/Applications/MAMP/htdocs/test/public/dir1/..
/Applications/MAMP/htdocs/test/public/dir1/subdir1/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir1/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir2/1.txt
/Applications/MAMP/htdocs/test/public/dir1/subdir2/1.txt

使用:

$path = realpath('/dir1');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename) {
                $files[] = $filename;
            }

for ($i=0; $i < count($files); $i++) {
    echo $files[$i] . "<br>";
}

还可以欣赏一系列路径,例如array(sub1/1.txt, sub1/2.txt, sub2/1.txt ...)。 欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

<强>更新

<?php

function scanDirectory($directory) {

    $files = glob($directory . '/*');

    $data = array();
    foreach ($files as $file) {
        if (is_dir($file)) {
            $data = array_merge($data, scanDirectory($file));
        } else if (substr($file,-4) == '.txt') {
            $data[] = $file;
        }
    }

    return $data;
}

$startDirectory = realpath(__DIR__);

$data = scanDirectory($startDirectory);

var_dump($data);

?>

答案 1 :(得分:0)

由于您使用的是RecursiveDirectoryIterator,因此您应该查看globiterator,它可以帮助您遍历目录和匹配文件。

修改: 如文档中所述:

  

以类似于glob()的方式遍历文件系统。

您可以轻松地遍历匹配模式的文件:

$it = new GlobIterator('./*/*.txt');
foreach($it as $item){
    var_dump($item->getFilename());
}