PerlでFTP(ファイル転送)するには
PerlでFTPするには、いろいろあると思いますが、標準モジュールNet::FTPを使用するのが簡単です。
◆標準モジュールNet::FTP使用のサンプル
use strict; use warnings; use Net::FTP; open(STDERR, '>>err.log'); my $ftp=Net::FTP->new('host.hatena.ne.jp', Passive => 1) or warn("Connected Error!\n"); #my $ftp=Net::FTP->new('host.hatena.ne.jp') or warn("Connected Error!\n"); $ftp->login('ID','Password') or warn("Login Error!\n"); $ftp->cwd('/'); $ftp->put('xx.htm') or warn("Ftp-put Error!\n"); $ftp->quit(); close(STDERR);
◆ソース解説
- open - warn()でのSTDERRへのメッセージをerr.logファイルに出力する。
- new(コンストラクタ) - パッシブモード(Passive => 1)でホストに接続する。
- login - IDとPasswordを指定する
- cwd - サーバー側のディレクトリを指定する
- put - ファイル(xx.htm)をサーバーへ転送する。
- quit - 接続を切断する。
- close - openしたらcloseしないとね。
ちなみに、パッシブモードとは、サーバーから通知されたポートに対してクライアントからコネクトする。
通常のアクティブモードでは、サーバーからクライアントにコネクトするので、ファイアーウォールやNAT(IPマスカレード)が中間にあるとブロックされたり、ポート番号が変更されたり、上手くコネクトができない。
◆追記(2008/04/15)
FTPには、制御用とデータ転送用の2つの通信経路がはられ、制御用経路でのやりとりで、アクティブ or パッシブモードを判断する。
その後は、データ転送用経路でのやりとりで、上記の説明通り。