PHP Recursive Directory Iterator - ignore certain files.
iterator, php
Solution
Thanks to @Sven and the PHP Docs:
$iterator = new RecursiveDirectoryIterator($directory);
$iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
$filter = new MyRecursiveFilterIterator($iterator);
$all_files = new RecursiveIteratorIterator($filter,RecursiveIteratorIterator::SELF_FIRST);
Then extended RecursiveFilterIterator
class MyRecursiveFilterIterator extends RecursiveFilterIterator {
public static $FILTERS = array(
'__MACOSX',
);
public function accept() {
return !in_array(
$this->current()->getFilename(),
self::$FILTERS,
true
);
}
}
As per the comment In the PHP Manual
Problem
I have a recursive directory iterator to select files from within a directory. SKIP_DOTS allows me to ignore the '.' and '..' elements, but I'd like to be able to also ignore '__MACOSX' directory and another other hidden files such as '.cache.php' ``` $iterator = new RecursiveDirectoryIterator($directory); $iterator->setFlags(RecursiveDirectoryIterator::SKIP_DOTS); $all_files = new RecursiveIteratorIterator($iterator); ``` There are other answers here and here but just wondered if there was a cleaner way? I was hoping there was going to be something in PHP Manual - FilesystemIterator SetFlags but it seems not.