名前¶
Net::FTP - FTPクライアント・オブジェクト
概要¶
use Net::FTP;
$ftp = Net::FTP->new("some.host.name", Debug => 0);
$ftp->login("anonymous",'-anonymous@');
$ftp->cwd("/pub");
$ftp->get("that.file");
$ftp->quit;
説明¶
Net::FTP
はPerlでRFC959に記述されているFTPの、簡単な クライアントを実装するためのクラスです。RFC959コマンドのサブセットの ためのラッパーを提供します。
概要¶
FTP はFile Transfer Protocolの略です。これはネットワークで結ばれた マシン間でファイルを転送する手段です。プロトコルはクライアント(その コマンドは、このモジュールによって提供されます)とサーバー(このモジュールでは 実装されません)を定義しています。通信は常にクライアントから開始されます。 そしてサーバーはメッセージとステータスコードを(それに場合によってはデータも) つけて応答します。
FTPプロトコルはサーバーへファイルの送信や取得を可能にします。 それぞれの転送には(クライアント上の)ローカル・ファイルと (サーバー上の)リモート・ファイルが含まれます。このモジュールでは 、1つしか指定されなければ、同じファイル名がローカルとリモートの両方で 使われます。これはローカル・ファイル名を指定しなければ、 リモート・ファイル/path/to/file
を転送することは、そのファイルを ローカルの/path/to/file
に入れようとするということを意味します。
プロトコルは、ファイルを転送中にファイルが受ける、さまざまな標準の 変換も定義しています。これらはASCII, EBCDIC, binary,そして byteです。 ASCIIがデフォルトのタイプで、ファイルの送信者が行の末尾を標準の表現に 変換し、受信者はそのローカルな表現に変換しなおします。EBCDICはファイルが EBCDIC形式に変換されることを示します。Binary(imageとしても知られています) 形式は、データを切れ目のないビット・ストリームとして送信します。 Byte形式はデータをバイトで転送します。2つのマシン間でのバイト・サイズの大きさが 違うかどうかに関わらず、その値は同じままになります。(理論的には- 実際には、あなたが実際に何をするのかわかっている場合にのみ、これを使うべきです)
コンストラクタ¶
- new (HOST [,OPTIONS])
-
これはNet::FTPオブジェクトのためのコンストラクタです。
HOST
は FTP接続が必要とするリモート・ホストの名前です。OPTIONS
はキーと値の組というハッシュの形式で渡されます。 指定できるオプションは以下の通りです:Firewall - FTPファイアウォールとして機能するマシンの名前。これは 環境変数
FTP_FIREWALL
によって上書きすることができます。 これが指定され与えられたホストに直接接続できなければ、 ファイアウォール・マシンへの接続が作られ、文字列@hostname
がログイン識別子に 追加されます。この種の設定はftpプロキシーとも呼ばれています。FirewallType - Firewallによって示されたマシンで実行されているファイアウォールの 種類。これは環境変数
FTP_FIREWALL_TYPE
によって上書きすることができます。 許されるタイプの一覧については、Net::Configでのftp_firewall_typeの説明を ご覧ください。BlockSize - Net::FTPが転送のさいに利用するブロックサイズ。(デフォルトは10240)
Port - FTP接続のためのリモート・マシンに接続するためのポート番号
Timeout - タイムアウト値を設定します(デフォルトは120)
Debug - デバッグ・レベル(Net::Cmdでのdebugメソッドを、ご覧ください)
Passive - 0以外の値を設定すると、全てのデータ転送はパッシブモードを 使って行われます。いくつかのダム(dumb)サーバーといくつかのファイアウォールの 設定を除けば、通常、必要とされません。これは環境変数
FTP_PASSIVE
によって 設定することもできます。Hash - ファイルハンドルへのリファレンス(e.g.,
\*STDERR
)が与えられると、 1024バイト毎にハッシュ・マーク(#)を出力します。これは、全ての転送で ハッシュ・マークが表示されるように、あなたに代わってhash()
メソッドを 呼び出すだけです。もちろんいつでも好きなときに、明示的にhash()
を呼ぶことが できます。コンストラクタが失敗すると、undefが返され、エラーメッセージが$@に入ります。
メソッド¶
特に記述がなければ、全てのメソッドはtrueまたはfalseを返します。 trueが処理が成功したことを意味します。メソッドが値を返すと 宣言しているときには、失敗ではundefまたは空リストを返します。
- login ([LOGIN [,PASSWORD [, ACCOUNT] ] ])
-
与えられたログイン情報でリモートのFTPサーバーにログインします。何も 引数が与えられなければ、
Net::FTP
は、接続するホストのための ログイン情報を検索するためNet::Netrc
パッケージを使います。何も情報が 見つからなければ、anonymousログインが使われます。 何もパスワードが与えられず、ログインがanonymousであれば、パスワード としてanonymous@が使われます。接続がファイアウォールを通るのであれば、
authorize
メソッドが引数なしで 呼ばれます。 - authorize ( [AUTH [, RESP]])
-
これは、いくつかのファイアウォール ftpプロキシーによって使われるプロトコルです。 これはデータを外へ送信するユーザを認証するために使われます。 両方の引数が指定されないと、
authorize
は検索を行うためNet::Netrc
を使います。 - site (ARGS)
-
リモート・サーバにSITEコマンドを送信し、応答を待ちます。
応答コードでの最も特徴的な数字を返します。
- type (TYPE [, ARGS])
-
このメソッドは、データ転送の種類を変更するため、リモートのFTPサーバに TYPEコマンドを送信します。戻り値は前の値です。
- ascii ([ARGS]) binary([ARGS]) ebcdic([ARGS]) byte([ARGS])
-
先頭の引数が正しく設定された
type
の同義語。注意 ebcdic と byte は完全にはサポートされていません。
- rename ( OLDNAME, NEWNAME )
-
リモートのFTPサーバー上のファイルを
OLDNAME
からNEWNAME
に変更します。 これはRNFR と RNTO コマンドを送信することによって行われます。 - delete ( FILENAME )
-
FILENAME
を削除する要求をサーバーに送信します。 - cwd ( [ DIR ] )
-
与えられた
$dir
にディレクトリを変更しようとします。 もし$dir
が".."
であれば、ディレクトリを1つ上に移動しようとするため、 FTPのCDUP
コマンドが使われます。ディレクトリが指定されなければ、 ルートディレクトリにディレクトリを変更しようとします。 - cdup ()
-
現在のディレクトリの親にディレクトリを変更します。
- pwd ()
-
現在のディレクトリのフルパス名を返します。
- restart ( WHERE )
-
次のデータ転送を開始するバイト・オフセットを設定します。Net::FTPは単に この値を記録し、次のデータ転送のときに使うだけです。このため、このメソッドは エラーを返すことはありません。しかしこれを設定することによって 後のデータ転送が失敗するかもしれません。
- rmdir ( DIR )
-
DIR
という名前のディレクトリを削除します。 - mkdir ( DIR [, RECURSE ])
-
DIR
という名前のディレクトリを作成します。RECURSE
がtrueであれば、mkdir
は与えられたパスでの全てのディレクトリを作成しようとします。新しいディレクトリへのフルパス名を返します。
- ls ( [ DIR ] )
-
DIR
あるいは現在のディレクトリのディレクトリ・リストを取得します。配列コンテキストでは、サーバーから返される行のリストを返します。 スカラー・コンテキストでは、リストへのリファレンスを返します。
- dir ( [ DIR ] )
-
DIR
あるいは現在のディレクトリのディレクトリ・リストを長い書式で取得します。配列コンテキストではサーバーから返された行のリストを返します。 スカラーコンテキストではリストへのリファレンスを返します。
- get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
-
サーバーから
REMOTE_FILE
を取得し、ローカルに保存します。LOCAL_FILE
は ファイル名またはファイルハンドルにすることができます。指定されなければ、 現在のディレクトリに、リモートファイルと同じディレクトリ部分を除いた名前(leafname) に保存されます。WHERE
が与えられると、そのファイルの最初のWHERE
バイトは転送されません。 そして既にそれが存在すれば、残りのバイトがローカルファイルに追記されます。LOCAL_FILE
あるいはLOCAL_FILE
が与えられなければ作成されたファイル名を 返します。エラーにぶつかればundefが返されます。 - put ( LOCAL_FILE [, REMOTE_FILE ] )
-
リモートサーバにファイルを出力します。
LOCAL_FILE
はファイル名あるいは ファイルハンドルにすることができます。LOCAL_FILE
がファイルハンドルであればREMOTE_FILE
は指定されなければなりません。REMOTE_FILE
が指定されなければ、 ファイルは現在の現在のディレクトリに、LOCAL_FILE
と同じディレクトリ部分を 除いた名前(leafname)に保存されます。REMOTE_FILE
あるいはREMOTE_FILE
が与えられなければ作成されたファイル名を 返します。注意: 何らかの理由で転送が完了せず、エラーが返されたとき、 転送されてしまった内容は自動的には削除されません。
- put_unique ( LOCAL_FILE [, REMOTE_FILE ] )
-
putと同じですが、
STOU
コマンドを使用します。サーバー上のファイル名を返します。
- append ( LOCAL_FILE [, REMOTE_FILE ] )
-
putと同じ。しかしリモート・サーバー上のファイルに追記します。
REMOTE_FILE
あるいはREMOTE_FILE
が与えられなければ作成されたファイル名を 返します。 - unique_name ()
-
STOU
コマンドを使ってサーバー上に格納された最後のファイルの名前を 返します。 - mdtm ( FILE )
-
与えられたファイルの更新時刻(modification time)を返します。
- size ( FILE )
-
与えられたファイルの大きさを、リモート・サーバーに格納されている バイト単位で返します。
注意: 報告される大きさはリモートサーバー上に格納されたファイルの大きさです。 後でファイルがサーバーからASCIIモードで転送され、リモートサーバーとローカルマシンの "行末(End Of Line)"の考え方が違うならば、転送後のローカルマシン上のファイルの大きさ は違うかもしれません。
- supported ( CMD )
-
リモートサーバーが与えられたコマンドをサポートしていれば、TRUEを返します。
- hash ( [FILEHANDLE_GLOB_REF],[ BYTES_PER_HASH_MARK] )
-
パラメータなし、あるいは最初の引数がfalseで呼ばれると、ハッシュ・マークは 出力されません。最初の引数がtrueであってもファイルハンドル・グロブへの リファレンスでなければ、\*STDERRが使われます。2番目の引数は 出力されるハッシュ・マーク毎のバイト数です。デフォルトは1024です。全てのケースで、 戻り値は2つの配列へのリファレンスです:ファイルハンドル・グロブ・リファレンスと ハッシュ・マーク毎のバイト数です。
以下のメソッドは、呼ばれ方によって異なる結果を返すかもしれません。 ユーザーが明示的にpasv
あるいはport
メソッドを呼び出せば、 これらのメソッドはtrueあるいはfalse値を返します。もし ユーザーがこれらのメソッドのどちらも呼び出さなければ、 結果はNet::FTP::dataconn
をベースとしたオブジェクトへのリファレンスに なります。
- nlst ( [ DIR ] )
-
オプションのパラメータをつけて、サーバーに
NLST
コマンドを送信します。 - list ( [ DIR ] )
-
nlst
と同じですがLIST
コマンドを利用します。 - retr ( FILE )
-
リモート・サーバーから
FILE
と呼ばれるファイルの取り出しを開始します。 - stor ( FILE )
-
サーバーにファイルを格納したいことを伝えます。
FILE
は作られるべき 新しいファイルの名前です。 - stou ( FILE )
-
stor
と同様ですがSTOU
コマンドを利用します。サーバー上に作成された 一意なファイルの名前は、データコネクションが閉じた後、unique_name
メソッドを 通して取得することが出来ます。 - appe ( FILE )
-
サーバーに
FILE
というファイルの末尾にデータを追記したいことを伝えます。 そのファイルが存在しなければ、作成します。
何らかの理由で、それを生成し必要なときにはresponse
メソッドを 呼び出すことを含めて、データコネクションを完全に制御したければ、 ユーザはこれらのメソッドを使ってそうすることができます。
しかしこれらのメソッドは単に、データコネクションを返すことが出来る上記の メソッドの利用に影響を与えるだけです。get
, put
,put_unique
そして データコネクションを必要としないものには、なんら影響を与えません。
- port ( [ PORT ] )
-
サーバーに
PORT
コマンドを送信します。PORT
が指定されると、それはサーバーに 送信されます。指定されなければ、リスン・ソケットが作成され、正しい情報が サーバーに送られます。 - pasv ()
-
サーバーにパッシブ・モードでいくことを伝えます。サーバーがリスンしているポートを 表すテキストを返します。このテキストは
port
メソッドを使って他のftpサーバーに 送信するのに適した形式になっています。
以下のメソッドは、2つのサーバーがお互いに直接接続できるとき、これら2つの リモート・サーバー間でファイルを転送するために使うことが出来ます。
- pasv_xfer ( SRC_FILE, DEST_SERVER [, DEST_FILE ] )
-
このメソッドは2つのリモートftpサーバー間でファイル転送を行います。もし
DEST_FILE
が省略されると、SRC_FILE
のディレクトリ部を除いたファイル名が 使われます。 - pasv_xfer_unique ( SRC_FILE, DEST_SERVER [, DEST_FILE ] )
-
pasv_xfer
と似ていますが、ファイルはSTOUコマンドを使って リモート・サーバに格納されます。 - pasv_wait ( NON_PASV_SERVER )
-
このメソッドはパッシブ・サーバと非パッシブ・サーバとの間での転送の完了を 待つために利用することができます。このメソッドはパッシブ・サーバで 引数である非パッシブ・サーバ用の
Net::FTP
オブジェクトで、 呼び出されなければなりません。 - abort ()
-
現在のデータ転送を中止します。
- quit ()
-
リモートFTPサーバにQUITコマンドを送信し、ソケット接続を閉じます。
冒険のためのメソッド¶
Net::FTP
はNet::Cmd
を継承しています。そのためNet::Cmd
で定義 されているメソッドをリモートのFTPサーバーにコマンドを送信するために 使うことが出来ます。
- quot (CMD [,ARGS])
-
Net::FTPが直接サポートしていないコマンドをリモート・サーバに送信し、 応答を待ちます。
応答コードでの最も特徴的な数字を返します。
警告 これはデータコネクションを必要としないコマンドに対してのみ使うべきです。 このメソッドを間違って使用すると接続がハングするかもしれません。
dataconnクラス¶
Net::FTP
で定義されているメソッドのいくつかは、このクラスから派生した オブジェクトを返します。dataconnクラスそのものはIO::Socket::INET
クラス から派生しています。そのため通常のIO操作のすべてを行うことが出来ます。 しかし以下のメソッドがdataconnクラスで定義されており、IOはこれらを使って 行われなければなりません。
- read ( BUFFER, SIZE [, TIMEOUT ] )
-
サーバからデータの
SIZE
バイトを読み込み、それをBUFFER
にいれます。 また必要であれば<CRLF>の変換も行います。TIMEOUT
はオプションで、 与えられると、そのコマンド接続から、そのtimeout値が使われます。CRLF
変換前の読み込んだバイト数が返されます。 - write ( BUFFER, SIZE [, TIMEOUT ] )
-
BUFFER
からのデータのSIZE
バイトをサーバーに書き込みます。 また必要であれば<CRLF>の変換も行います。TIMEOUT
はオプションで、 与えられると、そのコマンド接続から、そのtimeout値が使われます。CRLF
変換前の書き込まれたバイト数が返されます。 - bytes_read ()
-
それまでに読み込まれたバイト数を返します。
- abort ()
-
現在のデータ転送を中止します。
- close ()
-
データコネクションをクローズし、FTPサーバーからの応答を取得します。接続が正常に クローズされ、サーバーからの応答の最初の数字が'2'であれば、trueを 返します。
未実装¶
以下のRFC959コマンドはまだ実装されていません:
- ALLO
-
転送されるファイルのための領域を確保します。
- SMNT
-
ログインやアカウント情報を変更することなく、 異なるファイルシステム構造をマウントします。
- HELP
-
サーバーに、それが受け入れるコマンドについての (RFCが言うところの)"助けになるような情報"を求めます。
- MODE
-
転送されるファイルのための転送モード(stream, blockあるいはcompressed)を 指定します。
- SYST
-
リモート・サーバーのシステム識別子を要求します。
- STAT
-
リモート・サーバーのステータスを要求します。
- STRU
-
転送されるファイルのためのファイル構造体を指定します。
- REIN
-
接続の再初期化。全てのI/Oとアカウント情報をフラッシュします。
バグの報告¶
バグ/障害を報告するときには、できる限り多くの情報を入れてください。 セットアップはほとんど全て、それぞれに異なるため、私には障害を再現させる ことが難しいかもしれません。
障害を起こす小さなスクリプトは、おそらく助けになるでしょう。このスクリプトを 特別なオプションDebug =
1>をコンストラクタに渡して実行し、 その出力をバグレポートにつけて送ることも有効でしょう。小さなスクリプトを 入れることが出来なければ、障害を起こすプログラムの実行からのDebugトレースを 入れてください。
作者¶
Graham Barr <gbarr@pobox.com>
参考資料¶
ftp(1), ftpd(8), RFC 959 http://www.cis.ohio-state.edu/htbin/rfc/rfc959.html
使用例¶
Net::FTPの使用例については、これをご覧ください
- http://www.csh.rit.edu/~adam/Progs/autoftp-2.0.tar.gz
-
autoftp
は対話することなく、FTPプロトコルを通してファイルの 取得、送信、一覧をすることができるプログラムです。
謝辞(CREDITS)¶
Henry Gabryjelski <henryg@WPI.EDU> - 再帰的にディレクトリを作るという提案に対して
Nathan Torkington <gnat@frii.com> - ドキュメントでのいくつかの入力に対して
Roderick Schertler <roderick@gate.net> - いくつかの入力に対して
著作権(COPYRIGHT)¶
Copyright (c) 1995-1998 Graham Barr. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
$Id$