2012-05-17 36 views
3

我需要從包含大量文件的目錄中篩選出一些文件。在我的腳本中,這個函數被多次調用。如何有效地使用DirectoryIterator?

function getFilteredFiles($criteria) { 
    static $files = '';   
    if ($files == '') { 
     $files = new DirectoryIterator($path); 
    } 
    else { 
     $files->rewind(); 
    } 

    foreach($files as $file) { 
     if (! $file->isDot()) { 
      if (!$file->isDir()) { 
        //using $criteria 
        ... 
       } 
     } 
    } 
    ... 
} 

是放DirectoryIterator在靜態變量中去,讓PHP只能去一次文件系統來獲取文件的方式? (=不會PHP只能到文件系統的DirectoryIterator的__construct期間?)

回答

1

我看了看源代碼,並且,它看起來像他們嘗試倒帶,他們從讀取目錄條目流,當你快退的迭代器。我不敢深入研究php streams.c文件以進一步查看,但基於我看到的流式查找,我猜想它不會再次打到文件系統。

我想你可以快速使用strace的測試。

1

是放DirectoryIterator在靜態變量中去 讓PHP只能到文件系統,一旦獲得文件的方式? (= PHP是否 只能到文件系統 DirectoryIterator的__construct期間?)

是。

但是爲什麼你在控制器中創建數據模型的新實例,而不是子類呢?