2012-09-30 20 views
2

可能重复:
Displaying folders and making links of those folders使用RecursiveDirectoryIterator

我试图使用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(); 
} 

不知道这是最好的方法,但我的印象是RecursiveDirectoryIterator比均执行opendir()和水珠()方法快下我。

+1

你究竟想要弄清楚什么? – Baba

回答

9

SELF_FIRSTCHILD_FIRST作为无关RecursiveDirectoryIteratorRecursiveIteratorIterator

如果运行

$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); 
    } 

你会得到

...\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 

如果将其更改为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 

你能看出差别在于当前文件夹的位置吗

+0

@mister martin到底是什么意思? – Baba

+0

“您能否看到差异在当前文件夹的位置”是指正在处理儿童之前或之后正在处理的'... \ htdocs \ lab \ stockoverflow \ css'文件夹。 – lmeurs

+0

你将如何摆脱点文件夹('.','..')?海报使用'$ path-> isDot()',但是这种方法不存在。我想你会手动检查'!in_array($ path-> getBasename(),[“。”,“..”])'' – MDijkstra

相关问题