©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.1.2)
RecursiveDirectoryIterator::__construct — Constructs a RecursiveDirectoryIterator
$path
[, int $flags
= FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO
] )
Constructs a RecursiveDirectoryIterator()
for the provided path
.
path
The path of the directory to be iterated over.
flags
Flags may be provided which will affect the behavior of some methods. A list of the flags can found under FilesystemIterator predefined constants. They can also be set later with FilesystemIterator::setFlags() .
Returns the newly created RecursiveDirectoryIterator.
Throws an UnexpectedValueException
if the path
cannot be found or is not a directory.
Example #1 RecursiveDirectoryIterator example
<?php
$directory = '/tmp' ;
$it = new RecursiveIteratorIterator (new RecursiveDirectoryIterator ( $directory ));
$it -> rewind ();
while( $it -> valid ()) {
if (! $it -> isDot ()) {
echo 'SubPathName: ' . $it -> getSubPathName () . "\n" ;
echo 'SubPath: ' . $it -> getSubPath () . "\n" ;
echo 'Key: ' . $it -> key () . "\n\n" ;
}
$it -> next ();
}
?>
以上例程的输出类似于:
SubPathName: fruit/apple.xml SubPath: fruit Key: /tmp/fruit/apple.xmlSubPathName: stuff.xml SubPath: Key: /tmp/stuff.xmlSubPathName: veggies/carrot.xml SubPath: veggies Key: /tmp/veggies/carrot.xml
[#1] hanskrentel at yahoo dot de [2012-09-02 09:54:49]
The two default flags are zero (virtual) as with my PHP versions (5.3 and 5.4). Which means you can not check if those are set or not with the & bitwise operator:
<?php
// CURRENT_AS_FILEINFO (0)
// KEY_AS_PATHNAME (0)
### always FALSE ###
$directoryIterator->getFlags() & RecursiveDirectoryIterator::CURRENT_AS_FILEINFO;
?>
But this also allows that you can use other flags right ahead without repeating the default ones:
<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::UNIX_PATHS
);
?>
There is no need to repeat the default flags. Please note that this is different to FilesystemIterator which has as well the SKIP_DOTS flag as default which is non-zero:
<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::SKIP_DOTS
| FilesystemIterator::UNIX_PATHS
);
?>
[#2] pedro dot matamouros at gmail dot com [2010-09-17 05:43:45]
You can use RecursiveDirectoryIterator::FOLLOW_SYMLINKS as a flag to the constructor to have RecursiveDirectoryIterator follow symlinks, which it does not do by default.
[EDIT BY danbrown AT php DOT net on 16-JUL-2012: Contains a typofix provided by (lightrekky AT gmail DOT com) in note #109280 on 02-JUL-2012.]