« HTML_AJAXを使ってみよう | トップページ | 使い所の難しいPHPの機能 »

2007年01月07日

PEARを使って、圧縮や解凍をやってみよう

以前に複数ファイルを圧縮してダウンロードする方法(HTTP_DOWNLOAD)を紹介しました。
HTTP_DOWNLOADで複数ファイルを圧縮してダウンロードはできるものの、ファイルの[プロパティ]→[概要]が消える問題がありましたが、今回紹介するFile_Archiveは[概要]が消えずに問題なくダウンロードすることができます。
HTTP_DOWNLOADに関してはその名の通りダウンロード用のプログラムですが、File_Archiveは圧縮・解凍用のプログラムです。
ということで、今回はFIle_Archiveを紹介します。

・PEAR::File_Archiveのダウンロード
PEAR::File_Archive
*依存ファイルが多いのでレンタルサーバーをお使いの方はご注意ください。

インストールについて知りたい方は、過去の記事をご参照ください。
レンタルサーバーでPEARを使う方法
WindowsでPEARを自動インストールしてみよう

まずは、ファイルを圧縮してダウンロードしてみましょう。
適当に圧縮させたいディレクトリを準備してください。(今回は「sample」ディレクトリを圧縮すると仮定します)
早速、作ってみましょう。以下のソースを記述してください。

require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample/'),
  File_Archive::toArchive('sample.zip', File_Archive::toOutput())
);


これで完成です^^;プログラムをブラウザで確認するとzipに圧縮されたファイルがダウンロードできると思います。

File_Archive::extract(
  File_Archive::read($dir),
  File_Archive::toArchive($fileName, File_Archive::toOutput())
);
$dir:圧縮するディレクトリ名
$fileName:ダウンロードファイル名(tar, gz, bz2, tgz, tbz, zipが可能)
File_Archive::toOutput():圧縮したファイルをダウンロードする
File_Archive::toOutput()以外にはFile_Archive::toFiles()があります。 下記のソースを見てください。
require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample/'),
  File_Archive::toArchive('sample.zip', File_Archive::toFiles())
);


File_Archive::toOutput()File_Archive::toFiles()に変更すると、サーバー内に保存されます。

最後に圧縮したファイルを解凍する方法を紹介します。
sample.zipを「sample」ディレクトリに解凍すると仮定して、以下のようなソースを記述します。

require_once('File/Archive.php');

File_Archive::extract(
  File_Archive::read('sample.zip/'),
  File_Archive::appender('sample')
);


このプログラムを起動させると、解凍されたファイルがsampleディレクトリの中にあると思います。
File_Archive::extract(
  File_Archive::read($fileName),
  File_Archive::appender($dir)
);
$fileName:解凍する圧縮ファイル名(最後に「/」を入れる)
$dir:解凍先のディレクトリ名

解凍する圧縮ファイル名を記述際に、「/」を入れてください。(例:「sample.zip/」)

File_Archiveを使うことにより、サイトのバックアップを取ったり圧縮したファイルをアップロードしてサーバー上で解凍することも可能になります。

・関連記事
複数ファイルを圧縮してダウンロードしよう

トラックバック

このエントリーのトラックバックURL:
http://www.s-memo.net/mt/mt-tb.cgi/29

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)