ZIPファイルを操作する

投稿日:2022-11-05 投稿者:PS カテゴリ:その他 タグ: , ,

$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();
}