PHP Conference Japan 2024

RecursiveDirectoryIterator::__construct

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

RecursiveDirectoryIterator::__construct建構 RecursiveDirectoryIterator

說明

public RecursiveDirectoryIterator::__construct(字串 $directory, 整數 $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)

為提供的 directory 建構 RecursiveDirectoryIterator()

參數

目錄

要迭代的目錄路徑。

旗標

可以提供旗標,這將影響某些方法的行為。旗標列表可以在 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

另請參閱

新增筆記

使用者貢獻的筆記 2 則筆記

2
pedro dot matamouros at gmail dot com
14 年前
您可以使用 RecursiveDirectoryIterator::FOLLOW_SYMLINKS 作為建構函式的旗標,讓 RecursiveDirectoryIterator 追蹤符號連結,預設情況下它不會這樣做。

[由 danbrown AT php DOT net 於 2012 年 7 月 16 日編輯:包含 (lightrekky AT gmail DOT com) 於 2012 年 7 月 2 日在筆記 #109280 中提供的拼字修正。]
2
hanskrentel at yahoo dot de
12 年前
在我的 PHP 版本(5.3 和 5.4)中,兩個預設旗標都是零(虛擬)。這表示您無法使用 & 位元運算子檢查它們是否已設定。

<?php
// CURRENT_AS_FILEINFO (0)
// KEY_AS_PATHNAME (0)

### 永遠為 FALSE ###
$directoryIterator->getFlags() & RecursiveDirectoryIterator::CURRENT_AS_FILEINFO;

?>

但這也允許您直接使用其他旗標,而無需重複預設旗標。

<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::UNIX_PATHS
);
?>

無需重複預設旗標。請注意,這與 FilesystemIterator 不同,FilesystemIterator 也將 SKIP_DOTS 旗標作為預設值,該值非零。

<?php
new RecursiveDirectoryIterator(
'.',
FilesystemIterator::SKIP_DOTS
| FilesystemIterator::UNIX_PATHS
);
?>
To Top