PHPの暗号通信ライブラリphpseclib入門 (2.SCP, SFTP を利用してみる)

投稿者 : OSCA

 本稿では、前回にひき続き、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 でファイルを転送する方法について解説しました。 本稿で示した例では、各処理毎の例外処理を省略していますので、実装するアプリケーションに合わせて例外処理を実装するようにしてください。

PHP環境構築トップページへ戻る

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。