PHPでZip解凍(ZipArchive編)
ZipArchive を使ってZipファイルを解凍してみる。
使用環境
・ Amazon Linux 2
・ PHP 8.2.9
事前準備
PHPでZipがサポートされていない場合、ZipArchive が使えない。
エラーが出る場合は、php.ini等でサポートを有効化しておく。
(有効化の仕方は環境によるが、php.iniの末尾や設定ファイルに以下を追記する等)
; Enable zip extension module
extension=zip基本サンプル
Zipファイルを指定したフォルダに全展開するサンプル。
<?php
// インスタンス生成
$zip = new ZipArchive;
// ZipファイルをOpen
$result = $zip->open( 'sample.zip' );
if ( $result === TRUE ) {
    // 解凍する
    if ( ! $zip->extractTo( './' ) ) {
        // error
    }
    $zip->close();
} else {
    // error
}
open() の返り値は成功時はtrueだが、失敗時はエラーコード(数値)が返るので注意が必要。
(結果判定はtrueを明確に判定しないとおかしくなる)
extractTo() が実際の解凍処理で、解答先のパスを引数で指定する。
成功時はtrue。
失敗時はfalseが返るが、失敗時もフォルダなど一部だけ解凍されるケースがあるので注意が必要。
指定したファイルだけ解凍する
指定したファイルだけ解凍する場合、第2引数でファイルを指定出来る。
複数ファイルを指定したい場合は、配列で指定すればOK。
    // 1ファイルを指定して解凍する
    if ( ! $zip->extractTo( './', 'sample.txt' ) ) {
        // error
    }
    // 複数ファイルを指定して解凍する
    if ( ! $zip->extractTo( './', [ 'sample/sample1.txt', 'sample/sample2.txt' ] ) ) {
        // error
    }パスワード付きZipファイルの解凍
パスワードがある場合は、解凍前にパスワードを指定すればOK。
<?php
// インスタンス生成
$zip = new ZipArchive;
// ZipファイルをOpen
$result = $zip->open( 'sample.zip' );
if ( $result === TRUE ) {
    // 解凍パスワードを指定
    $zip->setPassword( 'password' );
    // 解凍する
    if ( ! $zip->extractTo( './' ) ) {
        // error
    }
    $zip->close();
} else {
    // error
}