Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Recursive Directory Iterator - ignore certain files.

Tags:

iterator

php

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.

like image 431
Kiksy Avatar asked Aug 16 '13 09:08

Kiksy


Video Answer


1 Answers

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

like image 73
Kiksy Avatar answered Oct 04 '22 00:10

Kiksy