ディレクトリごとFTPでアップロードしてくれるスクリプト - コマンドラインPHP

JavaScriptネタばかりで飽きてきたので、PHPネタでも書いてみる。 最近はまっているのは、webアプリケーションを作るためのPHPではなく、コマンドラインでいろいろできるPHPスクリプトを組むことです。

bashでも良いんだけど、やはり物足りないので、(と言ってもそこまで使いこなしていない・・・。)Pythonという選択肢もあるけど、Pythonわかんないので、PHPを使って、ディレクトリごとFTPでアップロードしてくれるスクリプトを書いてみた。

PEARライブラリを使ったソースコードになっているので、このクラスを使う場合、PEARのインストールが必要になってくる。

まずは、型となる ftpdirput.class を定義する。 ファイル名は ftpdirput.php で保存。

<?php

/*****************************************************
*
*  ftp_dir_put.class
*
*  ftpアップロードをディレクトリ単位で実行するクラス
*  Terminal上での実行専用
*
*****************************************************/

require_once 'Net/FTP.php';

class ftp_dir_put {

  /*-------------------------------------
  *  コンストラクタ
  */
  public function ftp_dir_put( $ftp_server, $ftp_user_name, $ftp_user_pass, $remote_dir, $local_dir, $mode ){
    /*-------------------------------------
    *  $target_hostオブジェクトを生成
    */
    $target_host = new Net_FTP( $ftp_server, 21 );

    //ftpサーバに接続
    if( $target_host->connect( $ftp_server  ) ){

      print $ftp_server.' に接続しました'."\n";

      //接続後、ログイン認証
      if( $target_host->login( $ftp_user_name, $ftp_user_pass ) ){
        print $ftp_server.' にログインしました'."\n";
        print $local_dir.' を '.$remote_dir.' にアップロードしています・・・'."\n";

        if( $target_host->putRecursive( $local_dir, $remote_dir, $mode ) ){

          print 'アップロードが終わりました'."\n";
          if( $target_host->disconnect() ){
            print 'ログアウトしました'."\n";
          }
          else{
            print 'ログアウトに失敗しました'."\n";
          }
        }
        else{
          print 'アップロードに失敗しました'."\n";
          if( $target_host->disconnect() ){
            print 'ログアウトしました'."\n";
          }
          else{
            print 'ログアウトに失敗しました'."\n";
          }
        }
      }
      else{
        print 'ログイン失敗しました'."\n";
      }
    }
    else{
      print $ftp_server.' に接続できません'."\n";
    }
  }
}

?>

そして、この ftpdirput.class を newして実行するファイルを作成 ファイル名は、test_host.php とかで保存。

<?php

require_once 'ftp_dir_put.php';

function init(){

  /*-------------------------------------
  *  プロパティセット
  */
  $ftp_server = 'host_name';       //ftpサーバーアドレス
  $ftp_user_name = 'user_name';    //ユーザー名
  $ftp_user_pass = 'user_pass';    //パスワード
  $remote_dir = '/';               //サーバー側ディレクトリパス
  $local_dir = '/var/www/html/';   //ローカル側ディレクトリパス
  $mode = true;                    //オーバーライド

  /*-------------------------------------
  *  実行オブジェクト
  */
  $test_init = new ftp_dir_put(
    $ftp_server,
    $ftp_user_name,
    $ftp_user_pass,
    $remote_dir,
    $local_dir,
    $mode
  );

}

init();

?>

これで、あとはコマンドラインにて、この test_host.php を実行

[user@host ~]$ php test_host.php

で、あとは勝手にアップロードしてくれる。 PEAR、凄いよ、PEAR。