2017-09-04 101 views
-3

我正在尋找以最快的方式遞歸掃描所有現有文件和文件夾的目錄。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

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

回答

3

你可以使用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

相關問題