サーバー間でファイルコピーする方法は?

このQ&Aのポイント
  • 複数のレンタルサーバー間でファイルをコピーする方法を知りたい
  • ローカルPCを経由せずにサーバー間でファイルを直接コピーする方法はあるか
  • Net::FTPを使用してサーバー間でファイルコピーを試みたが、エラーメッセージが表示される
回答を見る
  • ベストアンサー

サーバー間でファイルコピーしたい

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. というエラーメッセージがでます。 同じスクリプトをローカルで動かすと問題なく動きます。 ひょっとして、サーバー同士ではファイルコピーは出来ないものなのでしょうか?

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.2

結論から言いますと アクセス元とアクセス先を逆にして試してはどうでしょうか? いろいろ試したところ おそらく、CGIを置いているサーバーからのアクセスを hosts.allow で制限しているのではないだろうかと思います。 http://www.ipa.go.jp/security/fy12/contents/crack/soho/soho/chap2/freebsd/remote.html うちの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行は必要ありませんね

book_mark
質問者

お礼

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

その他の回答 (1)

回答No.1

コマンドラインから実行する限り問題なく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; 以下略 あたりで試してみたらどうかな? あとレンタルサーバーなどではそもそも、そのサーバーから他のサーバーへのアクセスを制限している場合も有りますね ラピッドサイトとかは昔いじったかぎりではそうでした

book_mark
質問者

補足

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の部分はサーバーのドメイン名です。 途中までは動いているみたいですが、サーバー側の問題でしょうか?

関連するQ&A

  • PerlでFTPアクセスし指定ファイルをアップデートしたい

    先日質問してから、いろいろと調べて、okwebのサイト検索から以下の内容を発見しました。 「サーバー間でファイルコピーしたい」 http://okwave.jp/qa2052204.html 試しに以下のプログラムをサーバーに設置して実行いたしました。 (ここから) #!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); use Net::FTP; $ftp = Net::FTP->new('サーバー名'); $ftp->login("ユーザーID", "パスワード"); $ftp->cwd('cm'); $ftp ->ascii(); $ftp->get("index.html"); $ftp ->binary(); $ftp->get("top.jpg"); $ftp->quit; exit; (ここまで) 500のサーバーエラーが表示されるのですが、サーバーにデータはダウンロードされました。 このエラーが表示されたのになぜ動作しているのか? と、エラーができなくなるにはどうしたらよいでしょうか?

  • サーバからNASにファイルコピーするバッチファイル

    サーバからNASにファイルをコピーするバッチファイルを作成しました。 NASの共有フォルダにアクセス制限を設定し、バッチファイルを実行すると、 「アクセスが拒否されました」のメッセージが出てコピーできません。 バッチファイルの実行アカウントを「system」にしています。 どこが間違っているのでしょうか。 よろしくお願いします。 NAS:バッファローTeraStation :ホスト名→NAS :共有フォルダ名→test ユーザ→test パスワード→password サーバ:Windows2003serverSE ***バッチファイル*** net use S: \\NAS\test "password" /user:test xcopy "C:\test00" "\\NAS\test" net use S: /delete

  • use CGI

    サンプルスクリプトのなかに use CGI qw(:cgi :form); use CGI::Carp qw(fatalsToBrowser); use Image::Magick; と書かれていたのですがuse CGI::Carp qw(fatalsToBrowser);は意味わかったのでコメントアウトしましたがuse CGI qw(:cgi :form);は何を読み込んでいるのですか?コメントアウトしても大丈夫でしょうか? イメージマジックは使うのでそのままにしてあります よろしくお願いします

    • ベストアンサー
    • Perl
  • CGIでFTPファイル送信・受信がしたい

    CGIでファイル送信・受信を行いたいと考えてます。 言語は PERL で Net::FTP を利用しようと思ってます。 ローカルで実行するとファイル送信・受信できるのですが。。。。。 サーバにスクリプトを置いてブラウザから実行すると500のエラーが出ます。 自分的には手詰まりの状態です。 大きなファイルが送受信できるようなものを探しています。 なにか参考にできるサイトはございませんでしょうか? よろしくお願いいたします。 #!/usr/bin/perl use strict; use Net::FTP; use CGI; my $host = "my.host.com"; my $user = "user"; my $pass = "pass"; my $remote_file = "/home/test1/remote.txt"; my $local_file = "/tmp/local.txt"; my $q = CGI->new(); my $ftp = Net::FTP->new($host) or die "can not connection: $@"; $ftp->login($user, $pass) or die $ftp->message; $ftp->binary; $ftp->get($remote_file, $local_file) or warn $ftp->message; $ftp->quit; print $q->header( -type=>'text/html', -charset=>'UTF-8', ); print <<"END_OF_HTML"; <body><p>done.</p></body> END_OF_HTML exit;

  • FTPサーバファイルGET バッチ作成

    初心者のものですが、FTPサーバにあるLOGファイルをGETして、 ローカルに保存したいのですが、旨く行きません。 誰か教えて頂ければと思います。よろしくお願いします。 一応、コマンドプロンプトでFTPに接続しようとしたのですが、 接続できません。PCに制限かけているからでしょうか。 USER名からは旨く行きません。 C:\Documents and Settings\acb>ftp 10.30.*.*  Connected to 10.30.*.*  320 (vsFTPd 3.0.1) User (10.30.*.* :(none)): **** 530 Permission denied. Login failed. ftp>

  • WinSCPを使ったファイルのアップロードの仕方

    FTP自体を初めて使う超初心者です。私の手元(家)にあるファイルを会社のサーバーにアップして欲しいと言われています。ソフトはWinSCPです。HostnameやRemotedeidrectory、パスワードを会社から教えられた通りに入力し、loginすると「ConnectonRefused]というエラーメッセージが出てログインできません。そもそも、Remotedeidrectoryに/user/local/~と入れてどうして会社のサーバーに繋がるのかも分かりません。http://~から始まるアドレスか何か入れるのかと思い、会社に聞いてみたところ、これでいいということでしたので、ますますどうして個人のlocal環境から、会社のサーバーに繋がるのか分かりません。簡単なFTPの仕組みと、どうすればloginできるのか、思い当たる原因があれば教えてください。よろしくお願い致します。

  • vbでFTPサーバーに対して、サーバー上でのファイル複製(コピー&ペー

    vbでFTPサーバーに対して、サーバー上でのファイル複製(コピー&ペースト)させたいのですが、どうしたらいいのでしょうか? vbでFTPクライアント機能を作っていて、既に、FTPサーバーへのファイルアップロード、ローカルへのダウンロード、ファイルやディレクトリの削除といった処理は実現できました。 今度は、FTPサーバー上にある既存のファイルを複製したいのですが、そのような命令が無いため、どうしたらいいのか考えています。 例えば、ローカルにダウンロードし、それをリネームして再度アップロードすれば同じ結果にはなりますが、効率が悪すぎますしネットワークに対しても迷惑です・・・。 FTPサーバー上で既存のファイルを複製するにはどうしたらいいですか?? 分かる方お願いします。

  • ファイル配布サーバーを作りたい

    はじめましてWindows2003server、IIS6、ASPで、 ファイル配布サーバーを作りたいのですが、うまく行かずに困っています。 試してみたのは以下の二つの方法です。 (1)WSHを用いる方法 IISでWEBサーバーを立てて、server内のファイルをコピー http://infoboard.winofsql.jp/list_lightbox.cgi?mid=smalltech&id=041027113413 のサンプルを参考にして、net useコマンドを利用して接続しようと思ったのですが、 strCommand = "net use z: \\PC名\copy パスワード /USER:ワークグループ\lightbox の次の Call WshShell.Run( strCommand,, true ) のところで 「Microsoft VBScript 実行時エラー (0x800A0046) 書き込みできません」というエラーが発生します。 Windows2000+IIS5.0で同じソースを実行したところ、 正常に稼動したのですが、それともIIS6.0ではブラウザからのWSHの実行は できない仕様になっているのでしょうか? (2)コピーコマンドを用いる方法 過去logの [5060] ファイルの存在について 2005/06/17 11:10:18 を参考に ネットワークドライブを割り当てて、ファイルシステムオブジェクトのコピーファイルコマンドを 使う方法でやろうとしたのですが、コンピュータ名でもIPアドレス指定でも うまくいきません。マイコンピュータ上でネットワークドライブとして表示されていても 初回接続時にID、パスワードを入力を要求される場合はダメなんでしょうか? あまりIISの設定やユーザーアカウントについても 詳しくないので、その辺りも含めてご説明していただけないでしょうか? よろしくお願いいたします。

  • phpでファイルをアップロードできるか?

    phpでのファイルアップロードについて質問します。 再質問となりますが、実際にコードを作成してやってみてうまくいかないので、 あらためて質問させていただきました。 eラーニング教材(htmlで作成)で、動画ファイルをストリーミングさせることになりました。 ウェブサーバ側へのアップロードする画面として、move_uploaded_file()やis_uploaded_file()メソッドをつかっていましたが、ストリーミングサーバ側としてFTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。 ftp_put()メソッドを使ってアップロードさせたところうまくいきません。 **************<コード>************* $ftp_server="【サーバー名】"; $ftp_user_name="【アカウント名】"; $ftp_user_pass="【パスワード】"; $conn_id = ftp_connect($ftp_server); $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); if ((!$conn_id) || (!$login_result)) { echo "FTP接続に失敗しました。"; exit; } else { echo "FTP接続に成功しました。"; } ここまででFTPの接続はできているようです。 その直後に、 $local_file="【ローカルのファイルパス】"; $remote_file="【FTPサーバー上のアップロードファイルパス】"; if (!ftp_put($conn_id, $remote_file, $local_file, FTP_BINARY)) { echo "FTPアップロードに失敗しました。"; exit; } else { echo "FTPアップロードに成功しました。"; } **************<コード>************* FTPアップロードに失敗します。 原因がわからなく、こまっています。 ポートの指定が必要なのでしょうか? おしえてください。 よろしくおねがいたします。 **************** FTP supportはenabled になっています。 phpのバージョンは4または5です。 IE7以上のブラウザ環境を想定しています。

    • ベストアンサー
    • PHP
  • FTPサーバーにファイルをコピー中に”このサーバーにファイルを置くアク

    FTPサーバーにファイルをコピー中に”このサーバーにファイルを置くアクセス許可が与えられているかどうか確認してください”というエラーが出て、ファイルをコピーすることができません。ログインは匿名です。ネットで調べた限りでは、この方法で間違えはないと思うのですが、どなたかアドバイスお願いします。

専門家に質問してみよう