ギャラリーのファイルからの動的なアーカイブ生成

ギャラリーのファイルからの動的なアーカイブ生成 -- File_Archive で画像や動画を処理する方法

File_Archive の使用例のひとつとして考えられるのは、 ギャラリーの画像や動画のファイルから動的にアーカイブを生成することです。

効率的に生成することを考えるなら、どのファイルフォーマットを選択するかが大事です。 選択肢をあげてみましょう。

1. Tar
2. Tgz, Tbz
3. Zip

1. Tar

利点: 効率よく作成できてメモリの使用量が一定、キャッシュは不要

欠点: 圧縮ができない (とはいえ、もともと画像や動画はそれ以上に圧縮するのは困難です)、 また Zip ほど広く知れ渡っていない

2. Tgz, Tbz

利点: 圧縮率が高く、メモリの使用量が一定

欠点: キャッシュができない。また、生成時に CPU にかなりの負荷がかかる

3. Zip

利点: 中間結果をキャッシュすることができる。 圧縮レベルを指定することができる。 幅広く用いられている。

欠点: 圧縮率が Tgz/Tbz より低い

ここでは Tar と Zip を取り上げます。Tgz や Tbz は、 アーカイブを "その場で" 作成するには CPU を食いすぎます。

Tar の作成

<?php
require_once "File/Archive.php";

// $files は、アーカイブに追加するファイルへのパスの配列です
File_Archive::extract(
    $files,
    File_Archive::toArchive(
        'myGallery.tar',
        File_Archive::toOutput()
    )
);
?>

Zip の作成

Zip を使用する最大の利点は、リソースをあまり消費しないこと (結果をキャッシュできるので) と幅広く用いられている形式であることです。 とりうる方法は二通りあります。まずは未圧縮の Zip アーカイブを作成すること (画像ファイルや動画ファイルは、もともとそれ以上の圧縮を期待できないため)、 もうひとつはキャッシュシステムを利用して圧縮済みの Zip アーカイブを作成することです。

まとめ

zip の作成と tar の作成はほとんど同じコードとなるので、 ユーザの選択内容に応じて処理を切り替えるコードをすっきりと書くことができます。 次のコードは、実際に私のサイトで使用しているものです。