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
/etc/php.d/20-zip.ini基本サンプル
Zipファイルを指定したフォルダに全展開するサンプル。
<?php
// インスタンス生成
$zip = new ZipArchive;
// ZipファイルをOpen
$result = $zip->open( 'sample.zip' );
if ( $result === TRUE ) {
// 解凍する
if ( ! $zip->extractTo( './' ) ) {
// error
}
$zip->close();
} else {
// error
}
PHPopen() の返り値は成功時はtrueだが、失敗時はエラーコード(数値)が返るので注意が必要。
(結果判定はtrueを明確に判定しないとおかしくなる)
extractTo() が実際の解凍処理で、解答先のパスを引数で指定する。
成功時はtrue。
失敗時はfalseが返るが、失敗時もフォルダなど一部だけ解凍されるケースがあるので注意が必要。
指定したファイルだけ解凍する
指定したファイルだけ解凍する場合、第2引数でファイルを指定出来る。
複数ファイルを指定したい場合は、配列で指定すればOK。
// 1ファイルを指定して解凍する
if ( ! $zip->extractTo( './', 'sample.txt' ) ) {
// error
}
// 複数ファイルを指定して解凍する
if ( ! $zip->extractTo( './', [ 'sample/sample1.txt', 'sample/sample2.txt' ] ) ) {
// error
}
PHPパスワード付き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
}
PHP