• ベストアンサー

【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経由

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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'"); でも同じですが。

ikataro
質問者

お礼

できました!! なるほど、1行にまとめればいいのですか。 ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

え?こういうことですよ cd /usr/home/xxx/html zip -r /usr/home/xxx/html/data.zip base

ikataro
質問者

お礼

ありがとうございます。なるほど少しできてきました。 いろいろ試したところ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)
回答No.1

cd /usr/home/xxx/html/ してから相対パスでできませんか? (試してないのでわかりませんが)

ikataro
質問者

お礼

ありがとうございます。 試してみましたが変化なさそうです…

関連するQ&A