php

PHPで大容量ZIPファイルを作成する

PHPにて画像ファイルをZIP形式にまとめてダウンロードする機会がありました。

PHPに存在するZipArchiveはとっても便利なんだけど容量の壁が存在します。
(32bitのライブラリを使用している以上 仕方ないですね)

ではどうすれば2GBを超えるZIP形式の圧縮ファイルを作れるのか?

色々調べてみたところtar形式からzip形式に変換するのが妥当な様子でした。

従来はZipArchiveを直接扱っていたので

$zip = new ZipArchive();
$zip->open("ZIP圧縮ファイル名", ZIPARCHIVE::CREATE);
$zip->addFile("圧縮対象の実パス", "圧縮後のZIP内パス");
...
$zip->close();

このような流れでしたが、

大容量ZIPを作成するにはPharData(中身はtarコンテナですね)からZIPに変換を行います。

$path = "一時圧縮ファイル名";
$pd= new PharData($path);
$pd->addFile("圧縮対象の実パス", "圧縮後のZIP内パス");
...
$zip = $pd->convertToData(Phar::ZIP); // zipコンテナ化
unlink($path);  // 一時圧縮ファイルを削除
$path = $zip->getPath(); // 圧縮後のファイルパス

あとはファイルダウンロードの手順と同じになります。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!