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に保持することで、重複した出力を行わないようにしています。