PHP Conference Nagoya 2025

RecursiveDirectoryIterator::__construct

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

RecursiveDirectoryIterator::__constructRecursiveDirectoryIterator を作成する

説明

public RecursiveDirectoryIterator::__construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

指定したパス directoryRecursiveDirectoryIterator() を作成します。

パラメータ

directory

反復処理の対象となるディレクトリのパス。

flags

フラグを指定して、いくつかのメソッドの振る舞いを変更することができます。 フラグの一覧は FilesystemIterator の定義済み定数 にあります。フラグは、あとから FilesystemIterator::setFlags() で設定することもできます。

エラー / 例外

directory が存在しない場合に、 UnexpectedValueException をスローします。

directory が空文字列の場合に、 ValueError をスローします。

変更履歴

バージョン 説明
8.0.0 directory が空文字列の場合に、 ValueError をスローするようになりました。 これより前のバージョンでは、 RuntimeException をスローしていました。

例1 RecursiveDirectoryIterator の例

<?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.xml

SubPathName: stuff.xml
SubPath:     
Key:         /tmp/stuff.xml

SubPathName: veggies/carrot.xml
SubPath:     veggies
Key:         /tmp/veggies/carrot.xml

参考

add a note

User Contributed Notes 2 notes

up
3
pedro dot matamouros at gmail dot com
14 years ago
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.]
up
1
hanskrentel at yahoo dot de
12 years ago
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
);
?>
To Top