PHPからでFTP接続を行って、FTPダウンロードをする「ftp_connect(),ftp_login(),ftp_nb_get()」
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接続を終了する。
COMMENT