ファイルをアーカイブしてダウンロードさせる

2010/02/13 | その他PEAR全般

複数のファイルを一括してダウンロードしたいというリクエストを頂いた。当然httpでは、例えばFTPのようにサーバのディレクトリをそのまままるごとダウンロードさせるようなことはできない。これを実現するための方法は、ダウンロードしたいファイル群を圧縮して一つのファイルとし、それをダウンロードさせる方法だ。調べてみると、大きく分けて二つの方法(ライブラリ)がありそうだ。一つはPear::File_Archiveを使用する方法、もう一つはphpMyAdminの中に含まれるスクリプトを流用する方法だ。後者はデータベースのダンプを圧縮ダウンロードするためのライブラリだ。後者のライブラリに関する記述を見る限りはかなりスマートに記述出来そうなイメージを持ったが、ライセンスがわからないので使用を控えることにした(クライアントに納品するものだしね)。

前者はもちろんライセンス的には難の問題もない。ただ、個人的に見て記述方法がスマートではないように見える。それがちょっと嫌(でも仕方ない)。スクリプトは以下のように記述した。

require_once “File/Archive.php”;
$obj = File_Archive::toArchive(date(YmdHis).’.zip’, File_Archive::toOutput());
foreach($borings as $boring){
$path=(ファイルのパス);
if($body=@file_get_contents($path)){
$obj->newFile(ファイル名);
$obj->writeData($body);
}
}
$obj->close();

とりあえず、これでダウンロードは出来ることを確認した。ただし一つ問題。lhacaなどのアーカイバではなんの問題もなく解凍できるが、エクスプローラで内容を確認しようとすると「無効です」と怒られてしまった。きっとファイルとして体をなすための許容の範疇ではあるけれども、ちょっとだけファイルが壊れているのだと想像した。なんとなく原因もわかっているけれど。

回避する方法はまた別の機会にでも記述することにする。

ini_set(‘include_path’,ini_get(‘include_path’).':’.dirname(__FILE__).’/../../pear/PEAR’);
require_once “File/Archive.php”;
$obj = File_Archive::toArchive(date(YmdHis).’.zip’, File_Archive::toOutput());
foreach($borings as $boring){
$path =dirname(__FILE__).’/../../data/’.substr($boring,0,2).’/DATA/BED’.$boring.’.XML';
if($body=@file_get_contents($path)){
$obj->newFile(‘BED’.$boring.’.XML’);
$obj->writeData($body);
}
}
$obj->close()

PEARを久々に使う

2009/09/15 | その他PEAR全般

久々にPEARを使うことになった(というより使わなければいけない羽目になった)。もちろんPEAR自体はとてもよくできていていいのだが、個々のライブラリ間の依存度合いが非常に強く、トータルで使わなければその実用性が発揮できないからだ(いや、本当はそんなことないけど、個人的に依存度合いの強いものを使いたくないだけ)。

文句ばかりでもしょうがないので、久々にインストール作業をすることになる。インストール対象はCentOS5。PEARをインストールするときは、いつも専用のディレクトリを作って、そこにまとめてインストールしていた。しかし今回はサーバのデフォルトの場所にインストールすることにした。

pear install (パッケージ名)

rootになってこのコマンドで一発インストールできるのだが、早速依存関係で怒られる。で、依存関係も解消してくれるよう以下のコマンドを実行する。

pear install –alldeps (パッケージ名)

はい、できあがり。これで一応使えるようになった(と思う)。あとはパスが通っているかどうかチェックするだけ。でもまぁ、あんまり乗り気ではない。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net