在 RecursiveDirectoryIterator 中沒有 FilesystemIterator::SKIP_DOTS 旗標的情況下,第一個範例中的程式碼無法正常運作(在 Linux 檔案系統上)。
因此,要使用 phar 建立 tar 檔,我會這樣做(這裡有兩層迭代)
$pharTar = new \PharData($contentTar.".tar");
$firstLevelIterator = new \DirectoryIterator($this->inputPath);
foreach ($firstLevelIterator as $fileInfo) {
/* @var \SplFileInfo $fileInfo */
if (in_array($fileInfo->getFilename(), $allowedDirectory)) {
$recursiveDirectoryIterator = new \RecursiveDirectoryIterator(
$this->inputPath . DIRECTORY_SEPARATOR . $fileInfo->getFilename(), \FilesystemIterator::SKIP_DOTS);
$pharTar->buildFromIterator(new \RecursiveIteratorIterator($recursiveDirectoryIterator), $this->inputPath);
}
}