FTPを使ったファイル転送Net::FTPを使用すると、FTPでファイルのダウンロード・アップロードができます。IT関連の仕事ではサーバにアクセスしてファイルをダウンロード・アップロードすることが頻繁にあります。FFFTPなどのFTPのクライアントのソフトウェアなどを使用してこれを行うのは非常に手間がかかります。できれば自動化したいと思うことでしょう。PerlにはFTPを行うためのクライアントアプリケーションを作成するためのNet::FTPというモジュールが標準で添付されています。Net::FTPを使えばファイルのダウンロード・アップロード作業は自動化され業務の効率化を図ることができます。FTPとはFTPはファイルを転送するためのプロトコルです。FTPを使用すればファイルのアップロードやダウンロードを行うことができます。概要(3分間Networking」がわかりやすいと思います。ここでは詳しい解説は行わずにFTPサーバに接続してファイルをダウンロードする手順を簡単に解説します。FTPサーバに接続してファイルをダウンロードするには次の3つ手順を踏みます。ホスト名(あるいはIPアドレス)を指定してFTPサーバに接続する。ユーザ名とパスワードを入力してログインするFTPコマンドを使用してファイルをダウンロードする接続を終了するファイルをダウンロードする簡単なサンプル実際にファイルをダウンロードする簡単なサンプルを書いてみます。接続を終了する$ftp->quit;newメソッドに接続先を指定するとFTPサーバに接続することができます。戻り値にはオブジェクトが返却されこれを利用してログインしたりFTPコマンドを発行したりします。loginメソッドにユーザ名とパスワードを指定するとFTPサーバにログインすることができます。ログインというのは簡単にいうとサーバによってFTPコマンドを実行する許可が与えられた状態のことをいいます。getというメソッドを使用するとファイルをダウンロードすることができます。ファイルはカレントディレクトリにダウンロードされます。ファイル名はディレクトリ名を含まない末尾の名前(このサンプルではsomefile)になります。使用するメソッドよく使用するメソッドについて紹介します。newNet::FTPオブジェクトを作成してFTPサーバに接続します。Net::FTP->new($host);引数にはホスト名かIPアドレスを指定することができます。第2引数以降はオプションを指定することができます。オプションはハッシュのリファレンスで指定します。使用するオプションとしてはタイムアウトの秒数を設定するためのTimeoutなどがあります。デフォルトのタイムアウトの秒数は120秒です。180)loginユーザ名とパスワードを指定してログインします。$password)匿名でFTPサーバに接続する場合はユーザ名に「anonymous」を指定します。$ftp->login('anonymous')cwd接続先のカレントディレクトリを変更します。$ftp->cwd($dir)FTPはステートフルなプロトコルで接続先のディレクトリを変更することができます。ファイルをダウンロードする場合はカレントディレクトリを変更してからファイル名だけを指定するのが一般的かもしれません。ファイルのダウンロードgetファイルをダウンロードするにはgetを使用します。$ftp->get($file)第2引数にファイル名を指定すると名前を変えてダウンロードを行うことができます。$renamed_file)putファイルをアップロードするにはputを使用します。$ftp->put($file$)第2引数にファイル名を指定すると名前を変えてアップロードを行うことができます。$renamed_file)binaryファイルの転送モードをバイナリモードに変更します。$ftp->binaryFTPにはファイルの転送モードという考え方があります。転送モードにはバイナリモードとアスキーモードの2種類があります。バイナリモードを指定するとファイルを転送するときに何の変換も行いません。画像ファイルや動画ファイルなどを転送する場合はかならずバイナリモードで転送する必要があります。asciiファイルの転送モードをアスキーモードに変更します。$ftp->asciiアスキーモードを指定すると改行コードの自動変換を行ってくれます。Windowsのデフォルトの改行コードは\r\nです。Unixのデフォルトの改行コードは\nです。Windowsのメモ帳などで作成したファイルをそのままUnixに転送すると正しく表示することができません。アスキーモードで転送するとこの変換を自動で行ってくれます。lsファイル名の一覧を取得します。$ftp->ls($dir)ディレクトリ名を省略した場合は接続先のカレントディレクトリに含まれるファイルの一覧を取得します。dirファイル名の一覧を詳細な情報を含めて取得します。$ftp->dir($dir)dirコマンドはOS依存です。-l」を実行した出力結果が得られます。私の現在使用しているFedora7の場合は次のような出力になります。mm.txtquitFTPサーバーとの接続を閉じます。$ftp->quit;ときどき使用するメソッドときどき使用するメソッドです。ファイルサイズの取得すべてのメソッドの一覧メソッドのすべての一覧はNet::FTPのマニュアルを参照してください。実は最初のサンプルではNet::FTPの使い方を簡潔に説明するためにエラー処理を省いていました。Net::FTPはコマンドなどが失敗した場合に例外を投げてくれないので自前でエラー処理を行う必要があります。最初のサンプルにエラー処理を加えると次のようになります。$ftp->message;$ftp->quit;エラー処理はなぜ行う必要があるのでしょうか?それはFTPサーバは外部にあるため確実に成功する保障はどこにもないからです。ネットワークのエラーやサーバのダウンなどで接続できないというときのことについて考える必要があります。ホスト名が間違っていた場合は接続に失敗します。このような場合に残りの処理を続けたとしても意味がありません。わかりやすいエラーメッセージを表示してプログラムは止まるべきです。Net::FTPのエラー処理について簡単に解説します。dieをしてプログラムを終了させます。OSのエラーメッセージである$!を含めておきましょう。接続した後にエラーが発生した場合は$ftp->messageでエラーの内容を取得することができます。このエラーメッセージをエラーメッセージに含めるようにします。$ftp->message;Net::FTPの実行できるサンプルユーザとパスワードを指定するFTPサーバにはサンプルでは接続することができません。パスワードを指定しないでもよい匿名サーバからファイルをダウンロードしてみます。CPANのミラーサイトからCPANのトップページ(index.html)をダウンロードするサンプルです。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebサービス開発も。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。