【Laravel】ZipArchive内のフォルダの存在確認を行う方法

Laravel

Laravelを使用してファイル操作を行う際、ZipArchiveを利用することはよくあります。Zipアーカイブ内のフォルダの存在を確認するためには、locateNameメソッドを使用することができます。ただし、注意が必要な点が一つあります。それは、フォルダ名の末尾にスラッシュ(/)を付ける必要があるということです。今回はその詳細について解説していきます。

ZipArchiveとは

ZipArchiveは、PHPの組み込み拡張機能で、ZIPアーカイブを操作するためのクラスです。これを使用することで、ZIPファイル内のファイルやディレクトリにアクセスし、操作することができます。

locateNameメソッドの活用

ZipArchiveクラスのlocateNameメソッドは、指定された名前のエントリ(ファイルやディレクトリ)がアーカイブ内に存在するかどうかを確認するために使用されます。具体的な例を見てみましょう。

$zip = new ZipArchive;
if ($zip->open('example.zip') === TRUE) {
    $folderName = 'aaa/bbb/';

    // 注意: フォルダ名の末尾にスラッシュを付ける
    $folderExists = $zip->locateName($folderName) !== false;

    if ($folderExists) {
        echo "フォルダ $folderName は存在します。";
    } else {
        echo "フォルダ $folderName は存在しません。";
    }

    $zip->close();
} else {
    echo 'ZIPファイルを開けませんでした。';
}

注意点: スラッシュの重要性

locateNameメソッドを使用する際に最も注意が必要なのは、フォルダ名の末尾にスラッシュを付けることです。例では'aaa/bbb/'となっていますが、これによって正確な判定が行われます。スラッシュを忘れると、意図した結果が得られない可能性がありますので、十分に注意してください。

LaravelにおいてZipArchiveを使用する際には、このようなフォルダの存在確認が必要な場面が稀にあると思います。locateNameメソッドを正しく理解し、適切に活用することで、スムーズなファイル操作が可能となります。

参考

How check if directory already added to ZipArchive during creation?
Usually, to check for a directory, you would use $zipArchive->locateName( "dirName" ); but while the zipfile is being cr...

コメント

タイトルとURLをコピーしました