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

WEB上のレンタルサーバーを複数使用しているのですが、それらの間でファイルをコピーするのに、一旦ローカルPCにダウンロードしてからアップロードするのは不便です。
そこで、ファイル名と送り先のサーバーとユーザー名・パスワード等必要な情報をインプットすればファイルをコピーするようなCGIを設置出来ないかと考えています。
Net::FTPを使えば出来るのかな?とか思って

#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use Net::FTP;
$ftp = Net::FTP->new('サーバー');
$ftp->login("ユーザー名", "パスワード");
$ftp->get("index.html");
$ftp->quit;

exit;

と、やってみましたが
Can't call method "login" on an undefined value at xxxxxxx.
というエラーメッセージがでます。

同じスクリプトをローカルで動かすと問題なく動きます。

ひょっとして、サーバー同士ではファイルコピーは出来ないものなのでしょうか?

A 回答 (2件)

結論から言いますと


アクセス元とアクセス先を逆にして試してはどうでしょうか?

いろいろ試したところ おそらく、CGIを置いているサーバーからのアクセスを
hosts.allow で制限しているのではないだろうかと思います。
http://www.ipa.go.jp/security/fy12/contents/crac …
うちのlinux上にあるproftpdではproftpd.confを、いくらいじっても同じ現象は再現できませんでしたが
上記のページを参考に/etc/hosts.denyに
ALL: ALL: twist /bin/echo "You are not welcome to use %d from %h."
と記述してからtelnetで接続してみると
You are not welcome to use in.telnetd from **.**.**.**.
Connection closed by foreign host.
となりました。

あと#1の投稿の訂正(このままでも動くがちょっと変)
>もしCGIでするのなら
>use CGI::Carp qw(fatalsToBrowser);
#1の例だと use CGI行は必要ありませんね
    • good
    • 0
この回答へのお礼

umasikajiro様

大当たりでした。
逆にすると確かにOKです。
片方のサーバーがアクセス制限している様ですね。
やりたい方向と逆なのですが、それは運用を考えたり、サーバーを選んだりすればいいわけですから、やりようはあると思います。

この件はこれでクローズさせていただきます。
どうもありがとうございました。

お礼日時:2006/03/26 20:57

コマンドラインから実行する限り問題なくGETできるようでしたけどねえ?


とりあえず以下のように変えてみたら?

$ftp = Net::FTP->new("www.taro.net", Debug => 1);
$ftp->login("tarou", "passwrd");
$ftp->cwd("/home/tarou/public_html/");
$ftp->get("index.html");
$ftp->quit;

もしCGIでするのなら
use CGI::Carp qw(fatalsToBrowser);
print"Cache-Control: no-cache\n";
print"Pragma: no-cache\n";
print"Content-type: text/html;charset='Shift_jis'\n\n";
print"<HTML>\n";
print"<h1>FTPTEST</h1><pre>\n";
open(STDERR, ">&STDOUT");
use Net::FTP;
以下略
あたりで試してみたらどうかな?

あとレンタルサーバーなどではそもそも、そのサーバーから他のサーバーへのアクセスを制限している場合も有りますね ラピッドサイトとかは昔いじったかぎりではそうでした

この回答への補足

umasikajiro様、早速ご回答ありがとうございます。

「コマンドラインから実行する限り問題なくGETできるようでしたけどねえ?」というのは、ローカルPCからのGETの話でしょうか?
私のマシン上でアパッチを動かし、その上でスクリプトを動かす限りGET出来ています。
レンタルサーバー上だとlogin部分でエラーが出る状況です。

上記の様に変えてみたら、loginエラーの前に

FTPTEST

Net::FTP>>> Net::FTP(2.75)
Net::FTP>>> Exporter(5.58)
Net::FTP>>> Net::Cmd(2.26)
Net::FTP>>> IO::Socket::INET(1.28)
Net::FTP>>> IO::Socket(1.28)
Net::FTP>>> IO::Handle(1.24)
Net::FTP=GLOB(0x823a814)<<< You are not welcome to use in.proftpd from yyyyyy.

というエラーメッセージが出ています。
yyyyyyの部分はサーバーのドメイン名です。

途中までは動いているみたいですが、サーバー側の問題でしょうか?

補足日時:2006/03/26 11:58
    • good
    • 0

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