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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With