File_Archive 1.4 では、 キャッシュを使用して zip 圧縮の結果を保存できるようになりました。 これを行うために、PEAR パッケージ Cache_Lite を使用しています。
zip ファイルを作成するには、まずされた圧縮ファイルを用意することになります。 たとえば、ファイル A、B および C を含むアーカイブと ファイル A および C を含むアーカイブのふたつを作成したい場合は、 A と C については 2 回圧縮する必要があります。 キャッシュを使用すると、最初の圧縮の際に圧縮したファイル A、B および C をキャッシュしておくことができ、2 回目の圧縮ではそれを再利用できるようになります。
キャッシュを使うのは (使うべきなのは)、同じファイルを含む zip アーカイブを動的に何度も作成しなければならない場合などです。 たとえば、あなたが公開している画像や動画などからユーザが選択した ファイルを zip 形式でダウンロードさせるといった場合がこれにあたります。
これをキャッシュを使わずに行うと、多くのユーザがアクセスした場合に 反応が非常に遅くなることでしょう。キャッシュを使えば、 同じファイルを何度も圧縮することはなくなります。
私のマシン (工場出荷時のままの状態の thinkpad T42P) では、 キャッシュのない状態で 200MB の zip アーカイブを作成するのにかかった時間は 30 秒でした。キャッシュを使用した場合、まだキャッシュが作成されていないときは 32 秒かかりましたが、圧縮されるすべてのファイルがキャッシュに載った状態では 2 秒で処理が完了しました。
キャッシュの正体は Cache_Lite オブジェクトです。
つまり、まずこのパッケージをインストールしなければなりません。
インストールさえしてしまえば、あとは
File_Archive::setOption() 関数で
cache
パラメータを使用するだけです。
キャッシュの準備
<?php
require_once "File/Archive.php";
require_once "Cache/Lite.php";
// キャッシュオブジェクトを作成します
$cache = new Cache_Lite(
array(
// コンストラクタのパラメータは Cache_Lite のドキュメントを参照ください
)
);
// File_Archive に対して、いま作成したキャッシュオブジェクトを使うように指示します
File_Archive::setOption('cache', $cache);
// あとはいつもどおりにアーカイブを作成します
// archive.zip という名前のファイルを作業フォルダに作成します
File_Archive::extract(
'folderToCompress',
'archive.zip'
);
// アーカイブをユーザに送信します
File_Archive::extract(
'folderToCompress',
File_Archive::toArchive(
'archive.zip',
File_Archive::toOutput()
)
);
?>