RecusriveDirectoryTerator-获取文件夹中具有特定参数的文件


RecusriveDirectoryIterator - Getting files within folder with specific params

我的最终目标是从一个目录(其中有目录)中只获取jpg|png文件。我首先从这篇文章开始:用PHP列出文件和目录(2012年10月;Aurelio De Rosa著),并确定了OOP方法(因为这似乎是最好的方法)。

当然,随之而来的是一些复杂性,到目前为止我还没有找到一个好的例子。下面的例子(来自RecursiveDirectoryIteratorDocs)似乎让我走到了这一步,但我还没有找到一个匹配所有需求的好方法(在例子下面):

$ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST );
$r = array();
foreach ($ritit as $splFileInfo) {
   $path = $splFileInfo->isDir()
         ? array($splFileInfo->getFilename() => array())
         : array($splFileInfo->getFilename());
   for ($depth = $ritit->getDepth() - 1; $depth >= 0; $depth--) {
       $path = array($ritit->getSubIterator($depth)->current()->getFilename() => $path);
   }
   $r = array_merge_recursive($r, $path);
}
print_r($r);

我想做的是:

  1. 指定$directory(假设为/media/galleries
  2. 让它先只看目录(所以如果有任何文件在顶级目录中,它会忽略它们)
  3. 检查每个目录是否可读(默认情况下可能已经可读)
  4. 列出这些文件中的每个jpg|png文件(再次确保每个文件都可读,我认为默认情况下可以这样做)
  5. 忽略FilesystemIterator中的任何/所有点文件似乎可以,但我仍然在顶级中得到可怕的.DS_Store文件)
  6. 将这些存储为多维数组

前面提到的例子似乎就在那里,但如果能帮助我朝着正确的方向前进,我们将不胜感激。

你问了很多,我不明白为什么阅读能力对你来说是一个如此突出的问题。如果一个目录不可读,RecursiveDirectoryIterator就不能进入,会抛出异常。

为了处理它,您需要在RecursiveIteratorIterator中将标志设置为"";捕获CCD_ 9"(开发人员反馈),因此您可能需要指定它:

  • RecursiveIteratorIterator::CATCH_GET_CHILD-它是一个标志,而不是一个模式,所以使用setFlags或构造函数的第三个参数,那里也有更多/更好的信息:http://php.net/recursiveiteratoriterator.construct

因此,这可能是你正在寻找的一种方式。希望只有一个指向正确方向的指针(我稍后可能会扩展)。