このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0075

CI_Ftp

 「CI_Ftp」ライブラリクラスは、FTPクライアント機能を提供します。

CI_Ftpの設定

 「CI_Ftp」の設定項目は以下のものがあります。
 最低限必要な設定は、接続先FTPサーバ名「hostname」、ログインユーザ名「username」と
ログインパスワード「password」です。残りはデフォルトでよければ設定する必要はありません。

設定項目 デフォルト 説明
hostname 接続するFTPサーバのホスト名、または、IPアドレスを指定します。
username ログインユーザ名を指定します。
password ログインパスワードを指定します。
port 21 接続するFTPサーバのTCPポート番号を指定します。
passive TRUE PASSIVEモードでの接続をする場合はTRUEを、 アクティブモードで接続する場合はFALSEを指定します。
debug FALSE CI_Ftpのデバッグ機能を有効にする場合はTRUEを指定します。
    $config['hostname'] = 'your.ftp.srv';
    $config['username'] = 'login_account';
    $config['password'] = 'login_password123';
    $config['port'] = 21;
    $config['passive'] = TRUE;
    $config['debug'] = FALSE;

CI_Ftpのロード

 「CI_Loader」クラスの「library()」メソッドでロードします。 「application/config/ftp.php」設定ファイルでCI_Ftpの設定を行わない場合は、 第二引数に設定情報を連想配列で指定するか、「initialize()」メソッドで指定します。
 また、設定情報はFTP接続を行う際に指定することもできます。

    $this->load->library('ftp');

    $config = array(
        'hostname' => 'your.ftp.srv',
        'username' => 'login_account',
        'password' => 'login_password123',
    );
    $this->load->library('ftp', $config);

    $this->load->library('ftp');
    $config = array(
        'hostname' => 'your.ftp.srv',
        'username' => 'login_account',
        'password' => 'login_password123',
    );
    $this->ftp->initialize($config);

FTP 接続・切断

connect($config = array())

 FTPサーバに接続するには、「connect()」メソッドを実行します。
 接続するとログイン処理もこの中で行われます。
 FTPサーバに接続が成功し、且つ、ログインに成功するとTRUEを返し、 接続とログインのいずれかに失敗するとFASLEを返します。

    $this->load->library('ftp');
    if ( $this->ftp->connect() ) {
        // 接続成功
    }
    else {
        // 接続失敗
    }

 引数に設定情報を指定することもできます。指定しない場合は、設定ファイル、または、 ロード時に指定した設定で接続処理を行います。

    $this->load->library('ftp');
    $config = array(
        'hostname' => 'your.ftp.srv',
        'username' => 'login_account',
        'password' => 'login_password123',
    );
    if ( $this->ftp->connect($config) ) {
        // 接続成功
    }
    else {
        // 接続失敗
    }

close()

 FTPの処理が済んだら切断します。
 FTPの切断は単純に「close()」メソッドを実行するだけです。

 接続には成功してログインに失敗しただけの可能性があるため、 「connect()」メソッドでFALSEが返っても「close()」メソッドを実行すべきです。

    if ( $this->ftp->connect() ) {
        // 接続成功
    }
    else {
        // 接続失敗
    }
    $this->ftp->close();

FTPコマンド処理

 FTPの接続が済んだら、FTPコマンドを発行してリモートサーバ上のファイルシステムに対し操作を行うことができます。

changedir($path = '', $supress_debug = FALSE)

 カレントディレクトリを移動します。
 第二引数にTRUEを指定すると、デバッグモードでもエラー処理を行いません。

    $this->ftp->changedir('some_dir');

mkdir($path = '', $permissions = NULL)

 新しくディレクトリを作成します。作成するディレクトリの権限(パーミッション)を指定することもできます。
 権限(パーミッション)は、8進数で指定します。

    $this->ftp->mkdir('new_dir');
    $this->ftp->mkdir('my_dir', 0775);

upload($locpath, $rempath, $mode = 'auto', $permissions = NULL)

 ローカルファイルをリモートファイルシステムにアップロードします。
 第一引数にローカルファイルシステム上のファイルパス、第二引数にリモートファイルシステムのファイルパスを指定します。
 ローカルのファイルパスは絶対パスかドキュメントルートからの相対パスです。

 第三引数には、ファイル転送モードを「ascii」、「binary」または、自動判別の「auto」 のいずれかを指定することができます。デフォルトは「auto」です。

 第四引数には、送信後のリモートファイルシステム上のファイルの権限(パーミッション)を8進数で指定することができます。 指定しなかった場合はFTPサーバの設定に依存します。

    $this->ftp->upload('my_file.txt', 'upload_dir/up_file.txt');
    $this->ftp->upload('my_file.txt', 'upload_dir/up_file.txt', 'ascii');
    $this->ftp->upload('my_file.txt', 'upload_dir/up_file.txt', 'ascii', 0600);

download($rempath, $locpath, $mode = 'auto')

 リモートファイルシステムからファイルをローカルにダウンロードします。  第一引数にリモートファイルシステム上のファイルパス、 第二引数にローカルファイルシステムのファイルパスを指定します。
 ローカルのファイルパスは絶対パスかドキュメントルートからの相対パスです。

 第三引数には、ファイル転送モードを「ascii」、「binary」または、自動判別の「auto」 のいずれかを指定することができます。デフォルトは「auto」です。

    $this->ftp->download('dl_dir/dl_file.exe', '../download/dl_file.exe');
    $this->ftp->download('dl_dir/dl_file.exe', '../download/dl_file.exe', 'binary');

rename($old_file, $new_file, $move = FALSE)

 リモートファイルシステムのファイルをリネーム、または、ファイルの移動を行います。

 第一引数に対象ファイル名、第二引数にリネーム後のファイル名を指定します。
 第三引数はFTPコマンドには何も影響しません。CI_Ftpのデバッグ処理でエラーメッセージを変える単なるフラグです。

    $this->ftp->rename('old_file.txt', new_file.txt');

move($old_file, $new_file)

 「rename()」メソッドを第三引数にTRUEを指定して実行します。
 従って、CI_Ftpのデバッグ処理への影響以外の処理内容は「rename()」メソッドとまったく同様です。

    $this->ftp->move('old_file.txt', 'new_dir/new_file.txt');

delete_file($filepath)

 リモートファイルシステムのファイルを削除します。

    $this->ftp->delete_file('./tmp/my_file.txt');

delete_dir($filepath)

 リモートファイルシステムのディレクトリを削除します。
 対象のディレクトリ内のファイルは再帰的に全て削除されます。

    $this->ftp->delete_dir('./tmp/my_dir');

chmod($path, $perm)

 リモートファイルシステムのファイルの権限(パーミッション)を変更します。
 第一引数に対象のファイル名、第二引数にパーミッションを8進数で指定します。

    $this->ftp->chmod('./tmp/my_file.txt', 0600);

list_files($path = '.')

 指定したディレクトリのファイルの一覧を配列で返します。

    $files = $this->ftp->list_files('.');
    print_r($files);
    /*
    Array(
        [0] => new_file
        [1] => my_dir
        [2] => tmp
    )
    */

mirror($locpath, $rempath)

 ローカルの指定したディレクトリを再帰的に全てリモートファイルシステムにミラーリングアップロードします。  ローカルファイルの権限(パーミッション)は、そのまま維持されます。

 第一引数にローカルのディレクトリパス、第二引数にリモートのディレクトリパスを指定します。

    $this->ftp->mirror('../backup', './data/backup');

CI_Ftpのデバッグモード

 設定項目「debug」をTRUEに設定すると、 CI_Ftpをデバッグモードで処理させることができます。 デバッグモードでは、各メソッド内でエラーが発生した際に、 CodeIgniterの共通関数「show_error()」でエラーメッセージを出力します。

 エラーメッセージは、デフォルトで「system/language/english/ftp_lang.php」 言語ファイルに定義されています。

    $config['debug'] = TRUE;