3

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

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 期间进入文件系统?)

4

2 回答 2

1

将 DirectoryIterator 放在静态变量中是让 php 只进入文件系统一次以获取文件的方式吗?(= php 是否只在 DirectoryIterator 的 __construct 期间进入文件系统?)

是的。

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

于 2012-05-17T13:04:32.307 回答
1

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

我想您可以使用 strace 快速测试。

于 2012-05-19T21:56:46.740 回答