dポイントプレゼントキャンペーン実施中!

複数のサーバに圧縮ファイルを転送するプログラムを考えています。
---プログラム---
$server = array("hoge1.sample.co.jp", "hoge2.sample.co.jp");
foreach($server as $host){
$BaseDir = "/home/tmp/data";
$cmd = "cd $BaseDir;tar cvfz data.tar.gz data1 data2 data3";
system($cmd); ###ファイル圧縮
transfer($BaseDir,$host);
}
function transfer($base,$host){
$cmd = "scp ${base}/data.tar.gz $host:$base";
system($cmd); ###ファイル転送
}
------------------
このときscpで転送を行う際にパーミッションがないとエラーが表示されて転送ができません。プログラムの中で転送先のフォルダにパーミッションを与える方法など考えたんですが、なかなかいい方法が思いつきません。フォルダにパーミッションを与えて転送できるようにするにはどうしたらよいでしょうか。

A 回答 (2件)

>相手先ホストのアカウントがなく、転送先フォルダにパーミッションがない場合、PHPのプログラムでパーミッション与えるのは難しいでしょうか??



相手先ホストのアカウントが無い場合、当然ながらSCPもSSHもできませんよ(できたら大変です)。

状況がよく判りませんが、転送元ホストのshellから、転送先ホストの所定のディレクトリにSCPやSSHを使ってファイルを置けないのであれば、PHP以前の問題です。

まず、転送元ホストのshellから、ファイルを転送先に送り込む方法を確立する必要があるかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
指摘していただいた内容を踏まえてもう一度考えてみたいと思います。

お礼日時:2007/01/10 19:20

>このときscpで転送を行う際にパーミッションがないとエラーが表示されて転送ができません。



なぜ、あらかじめパーミッションを与えておかないのでしょうか?

>プログラムの中で転送先のフォルダにパーミッションを与える方法など考えたんですが、

SCPが通るということは、SSHが通るのでしょうから、
http://pecl.php.net/package/ssh2
( 解説 http://www.doyouphp.jp/tips/tips_ssh2.shtml
で相手先ホストにログインして、フォルダにパーミッションを与えるプログラム(setuid付き)を起動することはできると思います。

もしくは、単純に、フォルダにパーミッションを持っているユーザ(以下のfoobar)で、scpアクセスするとか。
scp ${base}/data.tar.gz foobar@$host:$base

また、転送方法を逆方向にするとか。つまり、AサーバからBサーバにPUTしているのを、BサーバからAサーバにGETしにいくようにするということです。

とりあえず、思いついたものを書いておきました。
もし参考になれば。

この回答への補足

>なぜ、あらかじめパーミッションを与えておかないのでしょうか?

実は転送先のフォルダの所有者はすでに決まっていて変更できないことになっているんです。分かりやすく書くと以下のような形になります。
--------------------------------------------------
Aサーバ(転送元のサーバ)
転送するファイル:/home/tmp/data/data.tar.gz

Bサーバ(相手先ホスト)
転送先:/home/tmp/data → このフォルダの所有者は変更できない
---------------------------------------------------

>もしくは、単純に、フォルダにパーミッションを持っているユーザ(以下のfoobar)で、scpアクセスするとか。
実は現在、相手先ホストにはアカウントがないのでログインできない状態なんです。相手先ホストのアカウントがなく、転送先フォルダにパーミッションがない場合、PHPのプログラムでパーミッション与えるのは難しいでしょうか??

補足日時:2007/01/10 14:58
    • good
    • 0

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