可能重复:
显示文件夹并建立这些文件夹的链接
我正在尝试使用RecursiveDirectoryIterator创建一个简单的文件浏览器,但似乎无法弄清楚...有什么帮助吗?
$cwd = '/path/to/somewhere';
if(isset($_GET['path']) && is_dir($cwd.$_GET['path'])) {
$cwd .= $_GET['path'];
}
$dir = new RecursiveDirectoryIterator($cwd);
$iter = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::SELF_FIRST);
while($iter->valid()) {
// skip unwanted directories
if(!$iter->isDot()) {
if($iter->isDir()) {
// output linked directory along with the number of files contained within
// for example: some_folder (13)
} else {
// output direct link to file
}
}
$iter->next();
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否是最好的方法,但我的印象是RecursiveDirectoryIterator比opendir()和glob()方法都要快.
Bab*_*aba 10
SELF_FIRST并CHILD_FIRST作为无关RecursiveDirectoryIterator,但RecursiveIteratorIterator
如果你跑
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST );
foreach ( $iterator as $path ) {
if ($path->isDir()) {
print($path->__toString() . PHP_EOL);
} else {
print($path->__toString() . PHP_EOL);
}
Run Code Online (Sandbox Code Playgroud)
你会得到的
...\htdocs\lab\stockoverflow\css
...\htdocs\lab\stockoverflow\css\a.css
...\htdocs\lab\stockoverflow\css\b.css
...\htdocs\lab\stockoverflow\css\c.css
...\htdocs\lab\stockoverflow\css\css.php
...\htdocs\lab\stockoverflow\css\css.run.php
Run Code Online (Sandbox Code Playgroud)
如果你改成它 RecursiveIteratorIterator::CHILD_FIRST
...\htdocs\lab\stockoverflow\css\a.css
...\htdocs\lab\stockoverflow\css\b.css
...\htdocs\lab\stockoverflow\css\c.css
...\htdocs\lab\stockoverflow\css\css.php
...\htdocs\lab\stockoverflow\css\css.run.php
...\htdocs\lab\stockoverflow\css
Run Code Online (Sandbox Code Playgroud)
你能看到区别在于当前文件夹的位置