我有一个递归目录迭代器来从目录中选择文件。 SKIP_DOTS 允许我忽略 '.'和“..”元素,但我希望也能够忽略“__MACOSX”目录和另一个其他隐藏文件,例如“.cache.php”
$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$all_files = new RecursiveIteratorIterator($iterator);
还有其他答案here和 here但只是想知道是否有更清洁的方法?
我希望 PHP Manual - FilesystemIterator SetFlags 中会有一些东西但似乎没有。
最佳答案
感谢@Sven 和 PHP 文档:
$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$filter = new MyRecursiveFilterIterator($iterator);
$all_files = new RecursiveIteratorIterator($filter,RecursiveIteratorIterator::SELF_FIRST);
class MyRecursiveFilterIterator extends RecursiveFilterIterator {
public static $FILTERS = array(
'__MACOSX',
);
public function accept() {
return !in_array(
$this->current()->getFilename(),
self::$FILTERS,
true
);
}
}
根据评论 In the PHP Manual
关于PHP 递归目录迭代器 - 忽略某些文件。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18270629/