首页 > 解决方案 > 使用 RecursiveDirectoryIterator::SKIP_DOTS 显示文件

问题描述

我期待这样的结果:

/path/to/files/test.png
/path/to/files/folder1/test.png
/path/to/files/folder2/test.png

相反,我得到:

/path/to/files/.hidden_folder1/test.png
/path/to/files/test.png
/path/to/files/folder1/test.png
/path/to/files/folder2/test.png

我不希望出现带有点的子目录:

我的代码如下:

$ufo = '/path/to/files/';
$Directory = new RecursiveDirectoryIterator($ufo,RecursiveDirectoryIterator::SKIP_DOTS);
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+(.png)$/i', RecursiveRegexIterator::GET_MATCH);

foreach($Regex as $name => $Regex){
    echo $name.'<br>';
}

似乎 ::SKIP_DOTS 不起作用。

我也试过:

$ufo = '/path/to/files/';
$Directory = new RecursiveDirectoryIterator($ufo);
$Iterator = new RecursiveIteratorIterator($Directory,RecursiveDirectoryIterator::SKIP_DOTS);
$Regex = new RegexIterator($Iterator, '/^.+(.png)$/i', RecursiveRegexIterator::GET_MATCH);

foreach($Regex as $name => $Regex){
    echo $name.'<br>';
}

上面的代码返回:

/path/to/files/folder1/test.png
/path/to/files/folder2/test.png

这会删除 .test_folder 子目录,但也会删除当前目录。

我尝试搜索无数示例,但无法找出正确的格式来递归返回文件,包括当前路径,同时排除以 .

标签: php

解决方案


使用setFlags(RecursiveDirectoryIterator::SKIP_DOTS)方法。尝试这个:

$ufo = '/path/to/files/';
$Directory = new RecursiveDirectoryIterator($ufo);
$Directory->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+(.png)$/i', RecursiveRegexIterator::GET_MATCH);

foreach($Regex as $name => $Regex){
    echo $name.'<br>';
}

类似的问题在这里


推荐阅读