zip.lib.php について


上手くいかずに困っております。
具体的にはディレクトリ内の一つのファイルだけが圧縮されてダウンロードされます。
もちろんディレクトリ内には複数のファイルが入っております。

下記のコードで問題があるようでしたら教えてください。

よろしくお願いします。


require_once('./hoge/zip.lib.php');
$zipfile = new zipfile();
$dir = opendir($dir_hoge);
while ($name = readdir($dir)) {
if(preg_match("/^¥./",$name)){ continue; }
$data = implode("",file("$dir_cont/$name"));
$zipfile -> addFile($data, $name);
}
closedir($dir);
$zip_buffer = $zipfile->file();
header( "Content-Type: application/octet-stream" );
header( "Content-disposition: attachment; filename=xxxxx.zip" );
print $zip_buffer;

回答の条件
  • 1人2回まで
  • 登録:2007/02/15 22:59:42
  • 終了:2007/02/18 16:27:49

回答(2件)

id:tobeoscontinue No.1

tobeoscontinue回答回数214ベストアンサー獲得回数542007/02/16 10:37:20

ポイント35pt

ローカルな環境(Debian php-4.3.10)で$dir_hogeと$dir_contに同じ値を設定して確かめたところ複数のファイルがzipで固められ、解凍まで確認できました。


とりあえず、後のheader()とprintを注釈にして、$nameを表示してみてaddFile()がされているのか確かめてみてはどうでしょう。

id:worldtravel

ありがとうございます。

やはりだめです。

$nameは10以上のファイルが全て表示されます

そのなかの一つのファイルだけが圧縮されます。。。


すいません。

$dir_hogeと$dir_contは同じです。

投稿の際に間違えました。

2007/02/16 23:14:08
id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542007/02/17 13:31:20

ポイント35pt

サイズ、ゼロのファイル、リンク、ディレクトリーも含めてみましたが、やはりそれぞれ格納され再現できませんでした。orz


一つ気になるのはpreg_match()の"/^¥./"です。私の環境では(Debian)¥は円マークと解釈され\(バックスラッシュ)と解釈されていませんでした。

そのため、.や..のディレクトリーも格納されていました。この状態でunzipすると置換するか尋ねられるのですが、そこで終了すると『一つのファイルだけが圧縮されます』ということは可能性があるのかなぁと思います。(通常.や..は最初に出てくるのですが、そうとは限らないと何処で読んだような)


unzip -l xxxxx.zip

としてもやはり一つしか入っていないのでしょうか。

zip.lib.php v1.6のaddFile()の部分を見てみましたがif文で処理をスキップするようなことはしていないのでaddFile()していれば入るはずだと思うのですが、なんとも。

id:worldtravel

ありがとうございました。

`zip xxxxxxx`

が使えないサーバーのために何とかしようとしていましたが諦めます。

2007/02/18 16:27:23

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません