我已经尝试了几种方法在文件系统上使用RecursiveIteratorIterator
来忽略某些目录。如何使用RecursiveIteratorIterator忽略目录?
为了举例说明,我想忽略以下目录:/cache
。
我Iterator
看起来是这样的:
//$dirname is root
$directory = new RecursiveDirectoryIterator($dirname);
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
foreach ($mega as $fileinfo) {
echo $fileinfo;
}
我已经能够忽略使用pathinfo
某些文件扩展名,例如这个作品:
$filetypes = array("jpg", "png");
$filetype = pathinfo($fileinfo, PATHINFO_EXTENSION);
foreach ($mega as $fileinfo) {
if (!in_array(strtolower($filetype), $filetypes)) {
echo $fileinfo;
}
}
当我尝试使用PATHINFO_DIRNAME
(用适当的目录路径)它不起作用,没有错误,它只是不会忽略目录。
我也尝试过使用FilterIterator
无济于事,现在我想也许我应该使用RegexIterator
。
什么是使用RecursiveIteratorIterator
来忽略目录的最简单和最有效的方法?
实验没有奏效。 使用PATHINFO_DIRNAME
$dirignore = array("cache", "cache2");
$directory = new RecursiveDirectoryIterator($dirname);
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
$dirtype = pathinfo($fileinfo, PATHINFO_DIRNAME);
if (!in_array($dirtype), $dirignore)) {
echo $fileinfo; //no worky still echo directories
}
使用FilterIterator
(不知道这是如何工作)
class DirFilter extends FilterIterator
{
public function accept()
{
//return parent::current() != "..\cache\";
$file = $this->getInnerIterator()->current();
if ($file != "..\cache")
return $file->getFilename();
//also tried with same error as below
//return !preg_match('/\cache', $file->getFilename());
}
}
$directory= new RecursiveDirectoryIterator($dirname);
$directory = new DirFilter($directory);
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
// loop
提斯结果Error: An instance of RecursiveIterator or IteratorAggregate creating it is required
什么用FilterIterator你的实验是什么样子?这听起来像你在正确的轨道上。 – 2013-03-12 18:36:27
更新了2个不起作用的示例 – Wyck 2013-03-12 19:03:14