zipファイルを生成する
PHPでzipファイルを作る機会があったのでメモ。
関数化したので次からこれ使おう。
<? /* * makeZip * * @param files zipに詰めたいファイル情報の配列 * ただし、ファイル情報は * array('file_path' => "ファイルパス", 'zip_file_name' => "zip内でのファイル名") * という配列で表す * @param zip_path zipのパス * @return 正常ならtrue、失敗したらfalse */ function makeZip($files, $zip_path, $mode = 0755) { // 既にファイルが存在する場合は削除 if (file_exists($zip_path)) { @unlink($zip_path); } // ZipArchiveはPHP5.2以降なら標準で使用可能 $zip = new ZipArchive(); // オープンできなければエラー終了 if ($res = $zip->open($zip_path, ZipArchive::CREATE) !== true) { return false; } // 渡されたファイルを順番にzipに詰める foreach ($files as $file) { // 詰めるのに失敗したらエラー終了 if ($zip->addFile($file['file_path'], $file['zip_file_name']) == false) { $zip->close(); @unlink($zip_path); return false; } } // クローズしてパーミッション変更 $zip->close(); chmod($zip_path, $mode); // 正常終了 return true; }
呼び出し部分の例
<? $file_list = array(); $file_list[] = array( 'zip_file_name' => "test01.jpg", 'file_path' => "./files/test01.jpg", ); $file_list[] = array( 'zip_file_name' => "test02.jpg", 'file_path' => "./files/test02.jpg", ); $this->makeZip($file_list, "./zip/test.zip");