<?php




$dir = '/tmp/test';
@mkdir($dir, 0777, true);
touch($dir . '/.anyhidden'); // like .DS_Store on mac...
@mkdir($dir . '/mydir');


class DirFilterIterator extends \FilterIterator
{
    public function accept()
    {
        if ($this->current()->isDir()) {
            return true;
        }
        return false;
    }
}


$flags = \FilesystemIterator::KEY_AS_PATHNAME |
    \FilesystemIterator::CURRENT_AS_FILEINFO;

//$flags |= \FilesystemIterator::SKIP_DOTS; // uncomment this line to see the bug?


$it = new \RecursiveDirectoryIterator($dir, $flags);

$rit = new \RecursiveIteratorIterator($it, \RecursiveIteratorIterator::SELF_FIRST, 0);
$rit = new DirFilterIterator($rit);
$iterator = new \AppendIterator();
$iterator->append($rit);

foreach ($iterator as $f) {
    /**
     * @var \SplFileInfo $f
     */
    if ('.' !== $f->getBasename() && '..' !== $f->getBasename()) {
        echo sprintf('pathname: %s, filename: %s', $f->getPathname(), $f->getFilename());
        echo '<br />';
    }
}
