人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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;

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:application CONTINUE Dir hoge LIB
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tobeoscontinue
●35ポイント

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


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

◎質問者からの返答

ありがとうございます。

やはりだめです。

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

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


すいません。

$dir_hogeと$dir_contは同じです。

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


2 ● tobeoscontinue
●35ポイント

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


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

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


unzip -l xxxxx.zip

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

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

◎質問者からの返答

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

`zip xxxxxxx`

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ