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

SPQ*_*Inc -3 php recursion scandir

我正在寻找最快的方式来递归扫描所有现有文件和文件夹的目录。

例:

 - images
 -- image1.png
 -- image2.png
 -- thumbnails
 --- thumb1.png
 --- thumb2.png
 - documents
 -- test.pdf
Run Code Online (Sandbox Code Playgroud)

应该返回:

  • images / image1.png
  • images / image2.png
  • 图片/缩略图/thumb1.png
  • 图片/缩略图/thumb2.png
  • 文件/测试.pdf

因此,我将从以下内容开始:

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

但这是最快的方法吗?

Phi*_*ipp 5

您可以使用RecursiveDirectoryIterator-,但我怀疑,它比简单的回溯功能要快。

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path/to/folder'));
foreach ($iterator as $file) {
    if ($file->isDir()) continue;
    $path = $file->getPathname();
}
Run Code Online (Sandbox Code Playgroud)

  • @Sylwester在幕后,一个迭代器调用了更多功能-快退,有效,键,当前,下一个-每次迭代中都有一些功能。但是在这种情况下,这无关紧要,因为瓶颈将是磁盘 (2认同)