<?php
$dir = '/tmp/test' ;
@ mkdir ( $dir , 0777 , true ) ; touch ( $dir . '/.anyhidden' ) ; // like .DS_Store on mac...
class DirFilterIterator extends \FilterIterator
{
public function accept( )
{
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 />' ;
}
}
PD9waHAKCgoKCiRkaXIgPSAnL3RtcC90ZXN0JzsKQG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpOwp0b3VjaCgkZGlyIC4gJy8uYW55aGlkZGVuJyk7IC8vIGxpa2UgLkRTX1N0b3JlIG9uIG1hYy4uLgpAbWtkaXIoJGRpciAuICcvbXlkaXInKTsKCgpjbGFzcyBEaXJGaWx0ZXJJdGVyYXRvciBleHRlbmRzIFxGaWx0ZXJJdGVyYXRvcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmN1cnJlbnQoKS0+aXNEaXIoKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgoKJGZsYWdzID0gXEZpbGVzeXN0ZW1JdGVyYXRvcjo6S0VZX0FTX1BBVEhOQU1FIHwKICAgIFxGaWxlc3lzdGVtSXRlcmF0b3I6OkNVUlJFTlRfQVNfRklMRUlORk87CgovLyRmbGFncyB8PSBcRmlsZXN5c3RlbUl0ZXJhdG9yOjpTS0lQX0RPVFM7IC8vIHVuY29tbWVudCB0aGlzIGxpbmUgdG8gc2VlIHRoZSBidWc/CgoKJGl0ID0gbmV3IFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZGlyLCAkZmxhZ3MpOwoKJHJpdCA9IG5ldyBcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkaXQsIFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNULCAwKTsKJHJpdCA9IG5ldyBEaXJGaWx0ZXJJdGVyYXRvcigkcml0KTsKJGl0ZXJhdG9yID0gbmV3IFxBcHBlbmRJdGVyYXRvcigpOwokaXRlcmF0b3ItPmFwcGVuZCgkcml0KTsKCmZvcmVhY2ggKCRpdGVyYXRvciBhcyAkZikgewogICAgLyoqCiAgICAgKiBAdmFyIFxTcGxGaWxlSW5mbyAkZgogICAgICovCiAgICBpZiAoJy4nICE9PSAkZi0+Z2V0QmFzZW5hbWUoKSAmJiAnLi4nICE9PSAkZi0+Z2V0QmFzZW5hbWUoKSkgewogICAgICAgIGVjaG8gc3ByaW50ZigncGF0aG5hbWU6ICVzLCBmaWxlbmFtZTogJXMnLCAkZi0+Z2V0UGF0aG5hbWUoKSwgJGYtPmdldEZpbGVuYW1lKCkpOwogICAgICAgIGVjaG8gJzxiciAvPic7CiAgICB9Cn0K