- ベストアンサー
【ZIP】unixサーバーでディレクトリを保ちZIP圧縮する場合
サーバー上でディレクトリ構造を保ったままZIP処理を行なう方法について勉強しています。 下記のような2つのファイルがサーバー上にあるとき /usr/home/xxx/html/base/dir1/file1.txt /usr/home/xxx/html/base/dir2/file2.txt 以下の処理をかけると、 zip -r /usr/home/xxx/html/data.zip /usr/home/xxx/html/base data.zip 内に「usr」を先頭にしたディレクトリ構造が生成されます。 しかしこれでは意味のない多重入れ子となり具合がよくありません。 何とか「usr」ではなく「base」が先頭になるよう指定はできないものでしょうか? 具体的にはdata.zip内に、以下が生成されてほしいわけです。 base/dir1/file1.txt base/dir2/file2.txt 方法をご存じの方、よろしくお願いいたします。 <環境> レンタルサーバー FreeBSD 6.2 操作はPHP5経由
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
exec()ではなく、 system("cd /usr/home/xxx/html;zip -r /usr/home/xxx/html/data.zip base"); ではどうですか? あるいは、exec("sh -c 'cd /usr/home/xxx/html;zip -r /usr/home/xxx/html/data.zip base'"); でも同じですが。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
え?こういうことですよ cd /usr/home/xxx/html zip -r /usr/home/xxx/html/data.zip base
お礼
ありがとうございます。なるほど少しできてきました。 いろいろ試したところPHPの exec() 経由で実行しているから挙動が違うのではと想像しています。 まず、 1) zip -r /usr/home/xxx/html/data.zip base の2番目の引数("base"部分)はPHPファイルと同階層のディレクトリでなければ動かないようです。 2) また、cd /usr/home/xxx/html については いろいろ変えてみましたが影響はないようです。PHPから cd コマンド出すこと自体、意味がないんでしょうか。 というわけでファイル置場の制限付きですがおかげさまで /usr/home/… から始まるようなものすごい入れ子は回避できるようになりました。
- yambejp
- ベストアンサー率51% (3827/7415)
cd /usr/home/xxx/html/ してから相対パスでできませんか? (試してないのでわかりませんが)
お礼
ありがとうございます。 試してみましたが変化なさそうです…
お礼
できました!! なるほど、1行にまとめればいいのですか。 ありがとうございました。