FTP クラス
CodeIgniter のFTPクラスを使うと、リモートサーバにファイルを転送できます。リモートにあるファイルは、移動・リネーム・そして削除も可能です。また、FTP クラスには、FTP経由でローカルディレクトリをすべてリモートに再作成する "ミラーリング" 機能もあります。
Note: SFTP と SSL FTP プロトコルはサポートされていません。通常のFTPのみサポートされます。
クラスの初期化
CodeIgniterの大部分のクラスと同様、FTPクラスは、コントローラの中で $this->load->library メソッドを使って初期化します:
$this->load->library('ftp');
一度読み込まれると、FTPオブジェクトは、次のようにして利用できます: $this->ftp
使用例
以下の例では、FTPサーバに対してコネクションが開かれ、ローカルファイルがASCIIモードで読み取られてアップロードされます。ファイルのパーミッションは755に設定します。Note: パーミッションを設定するには PHP 5 が必要です。
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
$this->ftp->close();
以下の例では、サーバからファイルのリストが取得されます。
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$list = $this->ftp->list_files('/public_html/');
print_r($list);
$this->ftp->close();
以下の例では、ローカルディレクトリがサーバにミラーされます。
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;
$this->ftp->connect($config);
$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
$this->ftp->close();
メソッドリファレンス
$this->ftp->connect()
FTP サーバに接続してログインします。接続の設定は、配列で渡すか、設定ファイルに保管しておくことができます。
以下は、手動で設定をセットする方法を示した例です:
$this->load->library('ftp');
$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['port'] = 21;
$config['passive'] = FALSE;
$config['debug'] = TRUE;
$this->ftp->connect($config);
設定ファイルでのFTPの設定
必要であれば、FTP の設定を設定ファイルに保管することもできます。単純に、ftp.php という名前で新しいファイルを作成し、そのファイルに $config という名前の設定用配列を追加します。config/ftp.php ファイルに保存すると、自動的にそれが使われます。
利用できる接続オプション:
- hostname - FTP ホスト名。通常は次のようになります: ftp.example.com
- username - FTP ユーザ名
- password - FTP パスワード
- port - ポート番号。初期値は21に設定されています。
- debug - TRUE/FALSE (ブール値)。 デバッグ用にエラーメッセージを表示するかどうか。
- passive - TRUE/FALSE (ブール値). PASSIVEモードを使用するかどうか。PASSIVEモードは、デフォルトでは自動設定されます。
$this->ftp->upload()
サーバにファイルをアップロードします。ローカルのパスとリモートのパス、オプションで、転送モードとパーミッションを設定します。例:
$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
転送モードのオプション: ascii、binary、および auto (初期値)。auto が使用されているときは、転送するファイルの拡張子によって転送モードが決められます。
パーミッションは、PHP5で実行しているときに指定可能で、第4引数に、8進数の値を渡します。
$this->ftp->rename()
ファイルをリネームします。変更するファイルの名前/パスと、新しいファイルの名前/パスを指定します。
// green.html を blue.html にリネームします。
$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
$this->ftp->move()
ファイルを移動できます。移動元と移動先のパスを指定します:
// blog.html を "joe" から "fred" に移動します。
$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');
Note: 移動先のファイル名が元と違う場合はリネームされます。
$this->ftp->delete_file()
ファイルを削除できます。削除するファイルのパスとファイル名を指定します。
$this->ftp->delete_file('/public_html/joe/blog.html');
$this->ftp->delete_dir()
ディレクトリとそのディレクトリ含まれるものをすべて削除します。削除するディレクトリへのパスを末尾にスラッシュをつけて指定します。
Important このメソッドを使うときは、「厳重に」注意してください。渡されたパスに以下のサブフォルダと全ファイルのすべてのものを再帰的に削除します。パスが完全に正しいかを確認するようにしてください。list_files() メソッドをまず使って、パスが正しいかを検証するようにしてください。
$this->ftp->delete_dir('/public_html/path/to/folder/');
$this->ftp->list_files()
サーバにあるファイルのリストを取得して配列として返します。取得したいディレクトリへのパスを指定する必要があります。
$list = $this->ftp->list_files('/public_html/');
print_r($list);
$this->ftp->mirror()
ローカルフォルダ内のすべて (サブフォルダ含む) を再帰的に読み取って、FTP経由で、読み取ったもののミラーを作成します。元のファイルパスのディレクトリ構造がサーバに再作成されます。作成元のパスと作成先のパスを指定する必要があります:
$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
$this->ftp->mkdir()
サーバにディレクトリを作成できます。作成したいフォルダ名を末尾にスラッシュをつけて指定します。パーミッションは、8進数の値で第2引数に指定できます(PHP 5で実行している場合)。
// "bar"という名前のフォルダを作成します。
$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
$this->ftp->chmod()
ファイルのパーミッションをセットできます。パーミッションを設定したいファイルまたはフォルダのパスを指定します:
// "bar" に 777 のパーミッションを設定します。
$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
$this->ftp->close();
サーバとのコネクションを切断します。アップロードが終わったら、このメソッドを使うのをおすすめします。