PHP4でWEB開発をしています。あるフォルダをzip圧縮して、それをダウンロードするようなスクリプトを書きたいのですが、

exec("zip -r dirname.zip dirname");
としてもzipファイルが作成されないことがあります。親ディレクトリのモードは777です。何がいけないのでしょうか?
zlibを用いない方法を求めています。

なおダウンロード部では下記URLを参考にしました。
http://ns1.php.gr.jp/pipermail/php-users/2004-July/023325.html

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/08/08 19:53:18
  • 終了:2006/08/09 13:11:29

回答(4件)

id:mass3 No.1

mass3回答回数118ベストアンサー獲得回数152006/08/08 22:57:24

ポイント23pt

dirname.zip はリクエストごとにユニークな名前をつけていますか?

でないと、複数のリクエストを受け付けたとき正しい動作はできません。

execの復帰値および出力にもヒントがあると思うのでチェックするのがよいと思います。

http://www.php.net/manual/ja/function.exec.php

id:tecra

exec("zip ~")のステータスコードは12を返すのですが、それが何を表すのかはいまいちわかりません。

2006/08/09 00:02:48
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/08/09 02:32:01

ポイント23pt

ステータスコード 12 を返すとの事ですので、

zip コマンドのマニュアルを引いてみました。

16 bad command line parameters

とありますのでパラメーターのどこかが間違っているのでしょう。

"zip -r dirname.zip dirname" のうち、

dirname.zip dirname のそれぞれが固定であるなら、id:mass3 さんのおっしゃるとおり複数リクエストによる同時実行時に問題がある可能性があります。

動的に生成されているようならその部分を含めて提示していただけると問題がはっきりするかと思います。

id:k12u No.3

k12u回答回数80ベストアンサー獲得回数72006/08/09 05:19:52

ポイント23pt

http://www.info-zip.org/

$ grep -r ZE_NONE zip-2.31

zip-2.31/CHANGES:11. Use ZE_NONE when nothing to freshen or update (Onno, Yuri Sidorenko)

zip-2.31/cmsmvs/cmsmvs.c: return ZE_NONE;

zip-2.31/vms/vms.c: case ZE_NONE:

zip-2.31/windll/vb/VBZipBas.bas:Public Const ZE_NONE = 12 ' Nothing To Do Error

zip-2.31/zip.c: RETURN(finish(ZE_NONE));

zip-2.31/zip.c: ZIPERR(ZE_NONE, errbuf);

zip-2.31/zip.c: ZIPERR(ZE_NONE, zipfile);

zip-2.31/zipcloak.c: ziperr(ZE_NONE, decrypt ? "no encrypted files"

zip-2.31/ziperr.h:#define ZE_NONE 12 /* nothing to do */

というわけで1の方のおっしゃるとおり、名前がバッティングしてるのではないかと思います。作成しようとしているファイル名と既に存在しているファイル名を出力してみてはいかがでしょう。

id:mass3 No.4

mass3回答回数118ベストアンサー獲得回数152006/08/09 07:52:27

ポイント23pt

ステータス12は"zip has nothing to do"です。

http://linuxreviews.org/man/zip/

dirnameはフルパスで書いたほうがよいです。

id:tecra

フルパスで書いたら無事に作成できました。-jオプションをつけることで期待通りに圧縮できて満足です。皆さんありがとうございました。

2006/08/09 13:10:36

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

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

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

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

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