本稿では、前回にひき続き、phpseclib の使い方について解説します。 本稿では、SFTP, SCP でファイルを転送する方法について解説します。
SFTPでファイルを転送する
まずは SFTP でファイルを転送する方法について、サンプルプログラムを示して解説します。 なお、本稿では phpseclib v2.0 を前提に解説していきます。
ローカルのファイルを、別のコンピュータに転送する場合のサンプルプログラムは次の通りです。
<?php require "vendor/autoload.php"; use phpseclib\Net\SFTP; $sftp = new SFTP("myserver.net", 22); $sftp->login("username", "password"); $sftp->put("/tmp/dest_file.txt", "/tmp/from_file.txt", SFTP::SOURCE_LOCAL_FILE);
上の例では、ローカルのファイル「/tmp/from_file.txt」を、別のコンピュータ「myserver.net」に「/tmp/dest_file.txt」というファイル名で転送する例です。 SFTP クラスのコンストラクタで転送先のコンピュータを指定し、login() メソッドで認証ログインします。
メソッド put() メソッドの第3引数の SFTP::SOURCE_LOCAL_FILE はファイルを転送することを指示するフラグで、第3引数を指定しない場合または SFTP::SOURCE_STRING を指定した場合は、文字列を別のコンピュータにファイルで書き込みます。
$sftp->put("/tmp/dest_file.txt", "This is test message.", SFTP::SOURCE_STRING);
上のように指定した場合、「This is test mesasge.」という文字列を、別のコンピュータの「/tmp/dest_file.txt」に書き込みます。
SCPでファイルを転送する
次に SCP でファイルを転送する方法です。 ローカルファイルを別のコンピュータに転送するサンプルプログラムは次の通りです。
<?php require "vendor/autoload.php"; use phpseclib\Net\SSH2; use phpseclib\Net\SCP; $ssh = new SSH2("myserver.net", 22); $ssh->login("username", "password"); $scp = new SCP($ssh); $scp->put("/tmp/dest_file.txt", "/tmp/from_file.json", SCP::SOURCE_LOCAL_FILE);
SFTP の場合同様、SCPクラスの put() メソッドの第3引数で、SCP::SOURCE_LOCAL_FILE を指定することで、ファイルを転送することを指定しています。 SCP::SOURCE_STRING を指定した場合、文字列を別のコンピュータのファイルに書き込みます。
$scp->put("/tmp/newfile.txt", "This is test message.", SCP::SOURCE_STRING);
上のように指定した場合、「This is test message.」という文字列を、別のコンピュータの「/tmp/dest_file.txt」に書き込みます。
おわりに
本稿では phpseclib で SFTP, SCP でファイルを転送する方法について解説しました。 本稿で示した例では、各処理毎の例外処理を省略していますので、実装するアプリケーションに合わせて例外処理を実装するようにしてください。