【问题标题】:PHP: List all files in a folder recursively and fastPHP:以递归方式快速列出文件夹中的所有文件
【发布时间】:2017-09-04 13:03:59
【问题描述】:

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

例子:

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

应该返回:

  • images/image1.png
  • images/image2.png
  • 图像/缩略图/thumb1.png
  • 图像/缩略图/thumb2.png
  • 文档/test.pdf

所以我会开始:

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

但这是最快的方式吗?

【问题讨论】:

  • 大多数时候最慢的不是代码,而是存储硬件。换句话说:运行速度比快的代码没有什么好处。
  • 你可能也想检查一下php.net/manual/en/function.glob.php
  • 如果树命令可用,您可以使用它。
  • 磁盘访问总是成为此类任务的瓶颈。如果您可以考虑将结果缓存在内存中,那么您将看到显着的改进。

标签: php recursion scandir


【解决方案1】:

您可以使用 RecursiveDirectoryIterator - 但我怀疑它比简单的递归函数更快。

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

【讨论】:

  • 必须如此。 PHP 中的函数调用很昂贵。
  • @Sylwester 在幕后,一个迭代器调用了更多的函数——rewind、valid、key、c​​urrent、next——每次迭代都有一些函数。但在这种情况下,这无关紧要,因为瓶颈是磁盘
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 2019-12-29
  • 2014-09-07
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多