FuelPHPでFTP接続

作成日:2018-04-24, 更新日:2018-07-05

基本

try {
  $ftpHost = FTPのホスト;
  $ftpUser = FTPの接続ID;
  $ftpPswd = FTPの接続パスワード;
  
  $ftpConnect = array(
      'hostname' => $ftpHost, // 接続する FTP サーバの IP またはドメイン名。
      'username' => $ftpUser, // オプション: ログインが必要な場合は、接続に用いるユーザ名。
      'password' => $ftpPswd, // オプション: ログインが必要な場合は、接続に用いるパスワード。
      
      // ▼デフォルト値:省略不可っぽい
      'timeout'  => 90,       // 全てのネットワーク操作におけるタイムアウトの秒数。
      'port'     => 21,       // FTP サーバが応答するポート番号。ほとんどのサーバは 21 を用いる。
      'passive'  => true,     // パッシブモードを使用するかどうか。 デフォルトで自動的にパッシブを使用するように設定されています。
      'ssl_mode' => false,    // 通常の FTP よりも若干安全な FTPS モードを使用する (注意: これは SFTP ではありません) 。
      'debug'    => false,    // デバックをするために、エラーメッセージを表示するかどうか。
  );
  
  // FTPに接続
  $ftp = \Ftp::forge($ftpConnect, false);
  if ( !$ftp->connect() ) {
    // IDのミス等は「debug=true」は例外処理が発生、「debug=false」は「false」が返ってくる
    throw new Exception('接続失敗');
  }
  
  // ひとまずリスト一覧
  $listPath = リスト表示したいPATH;
  if ( !$files = $ftp->list_files($listPath)) {
    throw new Exception('err');
  }
  else {
    var_export($files);
  }
  
  //// 接続を閉じる→エラーになるのでひとまずコメント
  //if ( !$ftp->close() ) {
  //  // 接続は開いていなかった
  //}
}
catch (Exception $e) {
  echo $e->getMessage();
}

debug=trueとfalse

▼debug=true:エラー内容が分かる(try-catch()で使う)

try {
  $ftpConnect = array('debug'=>true,);
  $ftp = \Ftp::forge($ftpConnect, false);
  $ftp->connect();
}
catch (Exception $e) {
  echo $e->getMessage();
}

▼debug=false:エラー内容は分からない(try-catch()で使わない場合)

$ftpConnect = array('debug'=>false,);
$ftp = \Ftp::forge($ftpConnect, false);
if ( !$ftp->connect() ) {
  echo '接続失敗';
}

使う予定のヤツら

上記の「FTPに接続」のあとに追加記載。

▼以下で共通で使っている変数。

$localPath  = 元のサーバーのPATH;
$remotePath = 接続先のサーバーのPATH;

ファイルのアップロード

ファイルがあると上書きされる

$file = 'zebra.jpg';
if ( !$ftp->upload($localPath.$file, $remotePath.$file, 'auto', 0644) ) {
  throw new Exception('アップロード失敗');
}

ファイルのダウンロード(自サーバにダウンロードする)

ファイルがあると上書きされる

$file = 'zebra.jpg';
if ( !$ftp->download($remotePath.$file, $localPath.$file, 'auto') ) {
  throw new Exception('ダウンロード失敗');
}

※zipは「binary」モード。

ファイルの移動(リネーム)

ファイルがあると上書きされる

$isMove  = true;  // false:リネーム、true:移動
$oldPath = $remotePath.'chicken.jpg';
$newPath = $remotePath.'bk/pork.jpg';
if ( !$ftp->rename($oldPath, $newPath, $isMove) ) {
  throw new Exception('ファイルの移動(リネーム)失敗');
}

ファイルの削除

ファイルが無いとエラー

$file    = 'bk/zebra.jpg';
$delPath = $remotePath.$file;
if ( !$ftp->delete_file($delPath) ) {
  throw new Exception('削除失敗');
}

外部

・公式:Ftpクラス(FuelPHP1.8)