FTP クラス

CodeIgniter の FTP クラスを使うと、リモートサーバにファイルを転送できます。 リモートにあるファイルは、移動、リネーム、そして削除も可能です。 また、FTP クラスには、FTP経由でローカルディレクトリをすべてリモートに 再作成する “ミラーリング”機能もあります。

注釈

SFTP と SSL FTP プロトコルはサポートされていません。 通常の FTPのみサポートされます。

FTPクラスの機能

クラスの初期化

CodeIgniter の大部分のクラスと同様、FTP クラスは、コントローラの中で $this->load->library メソッドを使って初期化します:

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

一度読み込まれると、FTP オブジェクトは、次のようにして利用できます: $this->ftp

使用例

以下の例では、FTPサーバに対してコネクションが開かれ、 ローカルファイルが ASCII モードで読み取られてアップロードされます。 ファイルのパーミッションは755に設定します。

$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();

クラスリファレンス

class CI_FTP
connect([$config = array()])
パラメータ:
  • $config (array) – 接続情報
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

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 という名前の設定用配列を追加します。 application/config/ftp.php ファイルに 保存すると、自動的にそれが使われます。

利用できる接続オプション

選択肢 初期値 説明
hostname n/a FTP ホスト名(通常は次のようになります: ftp.example.com)
username n/a FTP ユーザ名
password n/a FTP パスワード
port 21 FTP ポート番号
debug FALSE TRUE/FALSE (ブール値): デバッグ用にエラーメッセージを表示するかどうか
passive TRUE TRUE/FALSE (ブール値): PASSIVE モードを使用するかどうか
upload($locpath, $rempath[, $mode = 'auto'[, $permissions = NULL]])
パラメータ:
  • $locpath (string) – ローカルのファイルパス
  • $rempath (string) – リモートのファイルパス
  • $mode (string) – FTP モード、 デフォルトは ‘auto’ (’auto’ 、 ‘binary’ 、 ‘ascii’ を指定する)
  • $permissions (int) – File パーミッション(8進数)
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

サーバにファイルをアップロードします。ローカルのパスとリモートのパス、オプションで、 転送モードとパーミッションを設定します。 例:

$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);

‘auto’ モードが使用されているときは、転送するファイルの拡張子によって転送モードが決められます。

パーミッションを設定する場合は8進数の値を渡さなければなりません。

download($rempath, $locpath[, $mode = 'auto'])
パラメータ:
  • $rempath (string) – リモートのファイルパス
  • $locpath (string) – ローカルのファイルパス
  • $mode (string) – FTP モード、 デフォルトは ‘auto’ (’auto’ 、 ‘binary’ 、 ‘ascii’ を指定する)
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

サーバからファイルをダウンロードします。リモートとローカルのパスを指定 する必要があります。オプションでモードを指定できます。 例:

$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');

‘auto’ モードが使用されているときは、転送するファイルの拡張子によって転送モードが決められます。

ダウンロードに成功しなかった場合は FALSE を返します。 (ローカルファイルに対するパーミッションがなかった場合も含む)

rename($old_file, $new_file[, $move = FALSE])
パラメータ:
  • $old_file (string) – 変更するファイルの名前
  • $new_file (string) – 新しいファイルの名前
  • $move (bool) – move を行うかどうか
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ファイルをリネームします。変更するファイルの名前/パスと、新しいファイルの名前/パスを指定します。

// green.html を blue.html にリネームします。
$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
move($old_file, $new_file)
パラメータ:
  • $old_file (string) – 変更するファイルの名前
  • $new_file (string) – 新しいファイルの名前
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ファイルを移動できます。移動元と移動先のパスを指定します:

// blog.html を "joe" から "fred" に移動します。
$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');

注釈

移動先のファイル名が元と違う場合はリネームされます。

delete_file($filepath)
パラメータ:
  • $filepath (string) – 削除するファイルのパス
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ファイルを削除できます。削除するファイルのパスとファイル名を指定します。

$this->ftp->delete_file('/public_html/joe/blog.html');
delete_dir($filepath)
パラメータ:
  • $filepath (string) – 削除するディレクトリのパス
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ディレクトリとそのディレクトリに含まれるものをすべて削除します。 削除するディレクトリへのパスを末尾にスラッシュをつけて指定します。

重要

このメソッドを使うときは、「厳重に」注意してください!! 渡されたパス以下のサブフォルダと全ファイルの すべてのもの を再帰的に削除します。 パスが完全に正しいかを確認するようにしてください。 list_files() メソッドをまず使って、パスが正しいかを検証するようにしてください。

$this->ftp->delete_dir('/public_html/path/to/folder/');
list_files([$path = '.'])
パラメータ:
  • $path (string) – ディレクトリのパス
返り値:

ファイルの配列、失敗時は FALSE

返り値の型:

array

サーバにあるファイルのリストを取得して 配列 として返します。 取得したいディレクトリへのパスを指定する必要があります。

$list = $this->ftp->list_files('/public_html/');
print_r($list);
mirror($locpath, $rempath)
パラメータ:
  • $locpath (string) – ローカルのパス
  • $rempath (string) – リモートのパス
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ローカルフォルダ内のすべて(サブフォルダ含む)を再帰的に読み取って、 FTP 経由で読み取ったもののミラーを作成します。 元のファイルパスのディレクトリ構造がサーバに再作成されます。 作成元のパスと作成先のパスを指定する必要があります:

$this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
mkdir($path[, $permissions = NULL])
パラメータ:
  • $path (string) – 作成するディレクトリのパス
  • $permissions (int) – パーミッション(8進数)
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

サーバにディレクトリを作成できます。作成したいフォルダ名を末尾にスラッ シュをつけて指定します。

パーミッションは、 8進数の値で第2引数に指定できます。

// "bar"という名前のフォルダを作成します。
$this->ftp->mkdir('/public_html/foo/bar/', 0755);
chmod($path, $perm)
パラメータ:
  • $path (string) – パーミッションを変更するファイルまたはディレクトリのパス
  • $perm (int) – パーミッション(8進数)
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

ファイルのパーミッションをセットできます。パーミッションを設定したいファイルまたは ディレクトリのパスを指定します:

// "bar" に755のパーミッションを設定します。
$this->ftp->chmod('/public_html/foo/bar/', 0755);
changedir($path[, $suppress_debug = FALSE])
パラメータ:
  • $path (string) – ディレクトリのパス
返り値:

成功時は TRUE 、 失敗時は FALSE

返り値の型:

bool

作業ディレクトリを指定したパスへ変更します。

close()
返り値:成功時は TRUE 、 失敗時は FALSE
返り値の型:bool

サーバとのコネクションを切断します。アップロードが終わったら、 このメソッドを使うのをおすすめします。