您可以使用 RecursiveDirectoryIterator::FOLLOW_SYMLINKS 作为构造函数的标志,让 RecursiveDirectoryIterator 跟踪符号链接,默认情况下它不会这样做。
[由 danbrown AT php DOT net 在 2012 年 7 月 16 日编辑:包含 (lightrekky AT gmail DOT com) 在 2012 年 7 月 2 日在注释 #109280 中提供的拼写错误修正。]
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
RecursiveDirectoryIterator::__construct — 构造一个 RecursiveDirectoryIterator
$directory
, int $flags
= FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)为提供的 directory
构造一个 RecursiveDirectoryIterator()。
directory
要迭代的目录的路径。
flags
可以提供标志,这些标志将影响某些方法的行为。标志列表可以在 FilesystemIterator 预定义常量 中找到。它们也可以稍后使用 FilesystemIterator::setFlags() 设置。
示例 #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
您可以使用 RecursiveDirectoryIterator::FOLLOW_SYMLINKS 作为构造函数的标志,让 RecursiveDirectoryIterator 跟踪符号链接,默认情况下它不会这样做。
[由 danbrown AT php DOT net 在 2012 年 7 月 16 日编辑:包含 (lightrekky AT gmail DOT com) 在 2012 年 7 月 2 日在注释 #109280 中提供的拼写错误修正。]
两个默认标志在我的 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
);
?>