ZIPファイルを操作する
$zip = new ZipArchive();
if($zip->open("sample.zip", ZipArchive::CREATE | ZipArchive::OVERWRITE)){
$zip->addFile('sample.txt');
$zip->addFile('sample.jpg');
}
$zip->close();open() のフラグ
| ZipArchive::CREATE | zipファイルが無い場合、作成する |
|---|---|
| ZipArchive::OVERWRITE | 常に新しい内容で開始する(zipファイルの内容をクリアにする) |
| ZipArchive::EXCL | 既にzipファイルが存在する場合はエラーにする |
| ZipArchive::RDONLY | 読み取り専用で開く |
例:ZIPファイルからファイルを取り出す
$zip = new ZipArchive;
if($zip->open($fn1)===true){
$cnt = 0;
for($i=0; $i<$zip->numFiles; $i++){ // zip 内のファイルを繰り返す
$na = $zip->getNameIndex($i); // ファイル名を取得
$d = $zip->statName($na); // ファイルの属性
$t2 = $d['mtime']; // ファイルの更新日時
$t1 = file_exists($na) ? filemtime($na) : 0 ; // 解凍先の同名ファイルの更新日時
if( $t2 > $t1 ){ // zip内のファイルの方が新しい場合
$zip->extractTo('./', $na); // カレントに解凍
touch($na, $t2); // タイムスタンプを zip内のものと同じにする
}
}
$zip->close();
}