如何有效地使用DirectoryIterator?

时间:2012-05-17 12:06:56

标签: php performance spl

我需要从包含大量文件的目录中过滤掉一些文件。在我的脚本中,此函数被多次调用。

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期间转到文件系统吗?)

2 个答案:

答案 0 :(得分:1)

  

将DirectoryIterator置于静态变量中   让php只进入文件系统一次获取文件? (= php   只在__construct期间转到文件系统   DirectoryIterator?)

但是你为什么要在控制器中创建一个新的数据模型实例而不是子类呢?

答案 1 :(得分:1)

我查看了源代码,当你回放迭代器时,看起来他们试图倒回他们读取目录条目的流。我不敢深入研究php streams.c文件以进一步查看,但根据我看到的流搜索,我猜它不会再次访问文件系统。

我猜你可以用strace快速测试。