PHPでZIPファイル内のディレクトリを読み込む方法

ZIPファイル内のディレクトリを読み取るには、次のコードを使用できます。

$zip = new ZipArchive;
if ($zip->open('file.zip') === TRUE) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $filename = $zip->getNameIndex($i);
        if (substr($filename, -1) == '/') {
            echo $filename . "\n";
        }
    }
    $zip->close();
}

上記の例では、最初に ZipArchive オブジェクトを作成してから zip ファイルを開きます。getNameIndex() メソッドを使えば zip ファイル内のファイルごとの名前を取得できるので、ファイル名の最後の文字が / であればそのファイルはディレクトリであることがわかります。ディレクトリ名をプリントアウトします。

ただし、上記コードではzipファイル内のディレクトリを読み取るまでで、そのディレクトリ内のファイルは読みません。ディレクトリ内のファイルを読むために、次のコードを参照してください。

$zip = new ZipArchive;
if ($zip->open('file.zip') === TRUE) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $filename = $zip->getNameIndex($i);
        if (substr($filename, -1) != '/') {
            $dirname = dirname($filename);
            if (!in_array($dirname, $directories)) {
                $directories[] = $dirname;
                echo $dirname . "\n";
            }
        }
    }
    $zip->close();
}

上部のコードでは、dirname()関数を用いてファイルのディレクトリ名を取得し、読み取ったディレクトリ名を配列$directoriesに保持することで、重複した出力を行わないようにしています。

bannerAds