PHP:递归和快速列出文件夹中的所有文件

问题描述:

我正在寻找以最快的方式递归扫描所有现有文件和文件夹的目录。PHP:递归和快速列出文件夹中的所有文件

实施例:

- images 
-- image1.png 
-- image2.png 
-- thumbnails 
--- thumb1.png 
--- thumb2.png 
- documents 
-- test.pdf 

应返回:

  • 图像/ image1.png
  • 图像/ image2.png
  • 图像/缩略图/ thumb1.png
  • 图像/缩略图/ thumb2.png
  • documents/test.pdf

所以我开始:

$filesandfolders = @scandir($path); 
foreach ($filesandfolders as $f){ 
if(is_dir($f)){ 
    //this is a folder 
} else { 
//this is a file 
} 
} 

但它最快的方式?

+3

大多数情况下,代码不是最慢的,而是存储硬件。换句话说:代码的运行速度比快速的代码还要多。 –

+0

你可能也想检查这个http://php.net/manual/en/function.glob.php – Edwin

+0

如果树命令可用,你可以使用它。 –

你可以使用RecursiveDirectoryIterator - 但我怀疑,它比一个简单的recusive函数更快。

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path/to/folder')); 
foreach ($iterator as $file) { 
    if ($file->isDir()) continue; 
    $path = $file->getPathname(); 
} 
+1

它必须是。函数调用在PHP中很昂贵。 – Sylwester

+0

@Sylwester在幕后,一个迭代器调用更多的函数 - 倒回,有效,键,当前,下一个 - 其中的一些迭代器。但在这种情况下,这应该不重要,因为瓶颈将是磁盘 – Philipp