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

2009年8月23日

Filed under: Linux,PHP,pear — admin @ 3:17 AM

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

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

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

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

PHP:
  1. <?php
  2.  
  3. /*****************************************************
  4. *
  5. *  ftp_dir_put.class
  6. *
  7. *  ftpアップロードをディレクトリ単位で実行するクラス
  8. *  Terminal上での実行専用
  9. *
  10. *****************************************************/
  11.  
  12. require_once 'Net/FTP.php';
  13.  
  14. class ftp_dir_put {
  15.  
  16.   /*-------------------------------------
  17.   *  コンストラクタ
  18.   */
  19.   public function ftp_dir_put( $ftp_server, $ftp_user_name, $ftp_user_pass, $remote_dir, $local_dir, $mode ){
  20.     /*-------------------------------------
  21.     *  $target_hostオブジェクトを生成
  22.     */
  23.     $target_host = new Net_FTP( $ftp_server, 21 );
  24.  
  25.     //ftpサーバに接続
  26.     if( $target_host->connect( $ftp_server  ) ){
  27.  
  28.       print $ftp_server.' に接続しました'."\n";
  29.  
  30.       //接続後、ログイン認証
  31.       if( $target_host->login( $ftp_user_name, $ftp_user_pass ) ){
  32.         print $ftp_server.' にログインしました'."\n";
  33.         print $local_dir.' を '.$remote_dir.' にアップロードしています・・・'."\n";
  34.  
  35.         if( $target_host->putRecursive( $local_dir, $remote_dir, $mode ) ){
  36.  
  37.           print 'アップロードが終わりました'."\n";
  38.           if( $target_host->disconnect() ){
  39.             print 'ログアウトしました'."\n";
  40.           }
  41.           else{
  42.             print 'ログアウトに失敗しました'."\n";
  43.           }
  44.         }
  45.         else{
  46.           print 'アップロードに失敗しました'."\n";
  47.           if( $target_host->disconnect() ){
  48.             print 'ログアウトしました'."\n";
  49.           }
  50.           else{
  51.             print 'ログアウトに失敗しました'."\n";
  52.           }
  53.         }
  54.       }
  55.       else{
  56.         print 'ログイン失敗しました'."\n";
  57.       }
  58.     }
  59.     else{
  60.       print $ftp_server.' に接続できません'."\n";
  61.     }
  62.   }
  63. }
  64.  
  65. ?>

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

PHP:
  1. <?php
  2.  
  3. require_once 'ftp_dir_put.php';
  4.  
  5. function init(){
  6.  
  7.   /*-------------------------------------
  8.   *  プロパティセット
  9.   */
  10.   $ftp_server = 'host_name';       //ftpサーバーアドレス
  11.   $ftp_user_name = 'user_name';    //ユーザー名
  12.   $ftp_user_pass = 'user_pass';    //パスワード
  13.   $remote_dir = '/';               //サーバー側ディレクトリパス
  14.   $local_dir = '/var/www/html/';   //ローカル側ディレクトリパス
  15.   $mode = true;                    //オーバーライド
  16.  
  17.   /*-------------------------------------
  18.   *  実行オブジェクト
  19.   */
  20.   $test_init = new ftp_dir_put(
  21.     $ftp_server,
  22.     $ftp_user_name,
  23.     $ftp_user_pass,
  24.     $remote_dir,
  25.     $local_dir,
  26.     $mode
  27.   );
  28.  
  29. }
  30.  
  31. init();
  32.  
  33. ?>

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

CODE:
  1. [user@host ~]$ php test_host.php

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

コメントはまだありません

コメントはまだありません。

この投稿へのコメントの RSS フィード。

現在、コメントフォームは閉鎖中です。