重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

サーバー上でディレクトリ構造を保ったまま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経由

A 回答 (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'"); でも同じですが。
    • good
    • 0
この回答へのお礼

できました!!

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

お礼日時:2009/08/06 15:50

え?こういうことですよ



cd /usr/home/xxx/html
zip -r /usr/home/xxx/html/data.zip base
    • good
    • 0
この回答へのお礼

ありがとうございます。なるほど少しできてきました。
いろいろ試したところ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/… から始まるようなものすごい入れ子は回避できるようになりました。

お礼日時:2009/07/31 17:12

cd /usr/home/xxx/html/


してから相対パスでできませんか?
(試してないのでわかりませんが)
    • good
    • 0
この回答へのお礼

ありがとうございます。

試してみましたが変化なさそうです…

お礼日時:2009/07/31 00:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!