PEARのArchiveで質問です。

下記のソースであるディレクトリのファイルの全てをZIPに圧縮するプログラムを作ったのですが、それを解凍すると、同じファイルが2個、3個と増えて圧縮されてます(当然、対象のディレクトリ内には同一名のファイルは存在しません。)

原因などご存知のかたいらっしゃいますでしょうか?対象のディレクトリのパーティションは、0777にしてます。


※$fileNameに出力ファイル名、$dirに圧縮対象のディレクトリを指定してます。

File_Archive::extract(
File_Archive::read($fileName . '/'),
File_Archive::toArchive($dir, File_Archive::toOutput())
);

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/02/27 02:07:54
  • 終了:2013/03/06 02:10:04

回答(2件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492013/02/27 02:44:08

ポイント50pt

3つのファイルがあったとして、
./example/a
./example/b
./example/c
保存先を./example/zにしてしまうと…
1. aを zに格納
2. bと z(中身はa) を zに格納
3. cと z(中身はaとb)を zに格納
zには aが3つ、bが2つ、cが1つ・・・ということでは?

この場合の対策はアーカイブ保存先ををファイルのディレクトリ下には作成しないこと。
もしくは、
ワイルドカードでファイルタイプを制限すること。

File_Archive::extract(
    File_Archive::read($dir . '/*.jpg'),
    File_Archive::read($dir . '/*.png'),
    File_Archive::read($dir . '/*.txt'),
    File_Archive::toArchive($fileName, File_Archive::toOutput())
); 
id:oil999 No.2

oil999回答回数1728ベストアンサー獲得回数3202013/02/27 18:11:13

ポイント50pt

$fileNameと$dirの指定位置が間違っています。
下記のようにしてみて下さい。

File_Archive::extract(
  File_Archive::read($dir),
  File_Archive::toArchive($fileName, File_Archive::toOutput())
);

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

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

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

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

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