PHPプログラミング言語を使った「SFTPへの接続」、「ファイルのリストアップ」、「アップロード」、「ダウンロード」のやり方をここで習得しましょう。
SFTP は、データやファイルの安全な転送や共有のための標準的で安全なプロトコルです。どのような場合であれ、プログラムで SFTP サーバーに接続するのは簡単ではありません。次の投稿では、本格的な PHP ベースの SFTP クライアントを徐々に構築していき、このガイドの終盤には自分で全て出来るようになるでしょう。
必要事項
まずは、接続するための SFTP サーバが必要です。もしお持ちでなければ、SFTP To Goで30秒もかからずSFTPエンドポイントの取得ができます。
PHP には最初から SFTP ライブラリがバンドルされていないため、必要なライブラリ phpseclib をインストールする必要があります。
$ composer require phpseclib/phpseclib
12 factor-app クラウド開発手法に従って、次のcomposer.json のようにアプリの依存関係を明確に定義する必要があります。
{
"require": {
"phpseclib/phpseclib": "^3.0"
}
}
本当に面白いのは今からです!
SFTP接続の作成と削除
まず、始めは新しいクラスの作成からです。ここにはSFTPクライアントに必要な機能が入っています。最初に追加するパブリックメソッドは、パスワード認証またはキー認証のいずれかを使ってサーバーに接続し、既存のセッションを切断する手段を提供します。
新しいメソッドを使うには、メイン関数でクラスをインスタンス化してauth_password
関数の呼び出しによって接続を開始し、直ちに disconnect
関数で接続を閉じます。次のようなURI 形式の環境変数 SFTPTOGO_URL
を使って、SFTP サーバーへの接続に必要なすべての情報を取得します:sftp://user:password@host
。該当変数は関数内で解析され、ユーザー名、パスワード、ホスト、オプションのポートが抽出されます。
ファイルの一覧表示
接続がうまくいったら、クラスにリモート SFTP サーバー上のファイルをリストアップするために使う関数を追加します。listFiles
関数は $remote_dir
引数をとり、 ファイル名の配列とそのサイズ、更新時刻を返します。この関数を呼び出すには、単にパスを渡して (.
でカレントディレクトリの内容が全て閲覧できる)、 取得した配列を処理します。
ファイルのアップロード
では、ファイルをアップロードしましょう。uploadFile
関数を使って、【送信元のローカルファイルのパス】と【送信先のリモートパス】の2つの引数を渡します。そして関数の呼び出しは次のようになります:$client->uploadFile("./local.txt", "./remote.txt");
ファイルのダウンロード
最後に大事な一点: ファイルをダウンロードするには、downloadFile
関数を使いましょう。リモートファイルへのパスと、ダウンロードしたファイルを保存するローカルパスを関数に渡します。この関数は、$client->downloadFile("./remote.txt", "./download.txt");
のように呼び出すことになります。
全体像
以上です!このプログラムを最初から最後まで通して実行したい場合は、以下のコードをコピーしてmain.php
として保存してください:
コードの実行には、下記のコマンドを使いましょう:
php main.php
また、Githubで我々のリポジトリをクローンしたり、他のコードサンプルをチェックアウトすることもできます。