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

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

●質問者: tecra
●カテゴリ:ウェブ制作
✍キーワード:777 URL Web zip スクリプト
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● mass3
●23ポイント

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

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

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

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

◎質問者からの返答

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


2 ● b-wind
●23ポイント

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

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

16 bad command line parameters

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

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

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

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


3 ● k12u
●23ポイント

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


4 ● mass3
●23ポイント

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

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



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