如何使用RecursiveDirectoryIterator忽略/排除文件夹?

时间:2013-12-24 11:59:33

标签: php

我正在使用PharData来创建tar包。它工作正常但它包括我不想要的文件夹。如何排除档案中的文件夹?

<?php
$dir = "/foobar/dir";
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir)
);

$phar = new PharData('/mytar.tar');
$phar->buildFromIterator($iterator, $dir);
$phar->compress(Phar::GZ);
unlink(realpath('/mytar.tar'));

我想在档案中忽略的文件夹是vendor/foobar/dir/vendor)。

1 个答案:

答案 0 :(得分:3)

您可以使用CallbackFilterIterator()过滤不需要的文件和文件夹(尚未测试):

<?php
$dir = "/foobar/dir";
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($dir)
);
$filterIterator = new CallbackFilterIterator($iterator , function ($file) {
    return (strpos($file, "vendor/") === false);
});
$phar = new PharData('/mytar.tar');
$phar->buildFromIterator($filterIterator, $dir);
$phar->compress(Phar::GZ);
unlink(realpath('/mytar.tar'));