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.

Original source