PHPでzipファイルを扱います

ZipArchiveを試して見たいと思います。

Symfony2のコマンドで実装っと。

class TestZipArchiveCommand extends ContainerAwareCommand
{

    protected function configure()
    {
        $this->setName('sample:zip-archive');
        $this->setDescription('ZipArchiveを試します');

        $this->addArgument('filename', InputArgument::REQUIRED);
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $fileName = $input->getArgument('filename');

        $zip = new \ZipArchive();

        if (($errCode = $zip->open($fileName)) !== true) {
            echo "can not open '${fileName}'. -- " . $errCode;
            exit(1);
        }

        // 中身が分かっている場合は狙い撃ち
        if (@!$zip->extractTo('./', 'dummy.dat')) {
            echo 'ZipArchive::extractTo failed.' . PHP_EOL;
            // echo $zip->getStatusString() . PHP_EOL;
            $zip->close();
            exit(1);
        }

        $zip->close();
    }
}

んー。extractTo失敗でも、ZipArchive::getStatusString が 'No error' ってなってしまいます。