PHPからでFTP接続を行って、FTPダウンロードをする「ftp_connect(),ftp_login(),ftp_nb_get()」

PR

PHPから外部のサーバーへFTPで接続することが可能で、FTP接続を行って外部のサーバーからファイルをダウンロードすることも出来ます、逆にアップロードすることも可能ですが今回はダウンロードの方法となります。用途としては、外部サーバにて作成したバックアップを定期的にダウンロードしてきて、多重バックアップにするといった使い方などがあります。サーバー間だけではなくて、PCに建てたローカルサーバーとサーバーとでのFTP接続もできるのでWindowsならタスクスケジューラーに登録してバックグラウンドで自動でPCにバックアップをダウンロードしてくるという使い方も出来る、今回はこれが目的でした。

 

PHPからFTP接続してファイルをダウンロードする

まずはPHPからFTP接続するために必要な情報を準備する

  • FTPサーバへの接続するドメイン名
  • FTPユーザー
  • FTPユーザーのパスワード

 

今回は、これらの情報を以下の変数に入れる

  • $domain
  • $user
  • $pass

 

次にサーバーへ接続を試みる。FTPのクライアントソフトを使っていると感じられないのですが、まずはサーバーに接続出来るかどうかをチェックし(存在するかどうか)、そのあとにユーザーとパスワードでログインします。

 

ftp_connect()で接続を試みる

$conn_id = ftp_connect($domain) or die("Couldn't connect to $domain");

このようにすることで、接続を行います。接続先の情報が、ftp_connectに引数で$domainを渡しています。もし接続が失敗した時にはエラーが表示されます。エラーが表示されない場合は接続が出来ており、接続中となる。

 

ftp_login()でログインを行う

if (@ftp_login($conn_id, $user, $pass)) {
  echo "Connected as $user@$domain<br>";
} else {
  echo "Couldn't connect as $user<br>";
}

ifを使ってログインが失敗した時にエラーが出るように組み込んであります。ftp_login()にftp_connectで接続中のセッションが入っている $conn_id、FTPユーザー名が入っている$user、FTPユーザーのパスワードが入っている、$pass を順に引数で渡しログインを試みます。成功すれば 返り値に TRUE 、失敗すれば FALSE が返ってくる。

 

ftp_nb_get()でFTP接続中のにFTPでダウンロードを行う

//取得ファイルのパスと、保存ファイルのパス
$get_file_name = "/home/xxx/www-backup/text.txt";
$save_fine_name = "F:/server-backup/xxx/text.txt";

$ret = ftp_nb_get($conn_id, $save_fine_name, $get_file_name, FTP_BINARY);
while ($ret == FTP_MOREDATA) {

 // ダウンロードを継続する…
 $ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
 exit("can not download file to finish ".$get_file_name."<br>");
}

ダウンロードするファイルと保存するファイルを変数に入れておきます。フルパスもしくは相対パスでファイルを指定します。ftp_nb_get()に引数で、$coon_id、ダウンロード先、ダウンロード元、バイナリ形式 という情報を渡してダウンロードを開始します。 whileで接続を継続するようタイムアウトしないようにし、ifでは失敗した時の表示処理。

 

 

ftp_close() で最後にFTP接続を終了する

ftp_close($conn_id);

ftp_close()で接続中の $conn_id を引数で渡して、そのFTP接続を終了する。

PR

COMMENT

コメントを残す

PR

9ineBBの管理人が運営するサイト

WDG WEB DESIGN GALLERY ウェブデザインギャラリー