PHPのftp_nb_fget()関数とは?構文・パラメータ・使い方を解説
PHPのftp_nb_fget()関数は、FTPサーバー上のファイルを非同期(ノンブロッキング)でダウンロードし、すでに開かれているローカルファイルへ書き込むための関数です。通常のftp_fget()と異なり、ダウンロード中もスクリプトの処理を継続できるため、進行状況の表示などを行いたい場合に便利です。
構文
ftp_nb_fget(con, open_file, server_file, transfer_mode, beg_pos);
パラメータ
con − FTP接続リソース(ftp_connect()で取得した接続)を指定します。
open_file − ダウンロードしたデータを保存する、ローカル側で開かれているファイルポインタを指定します。
server_file − ダウンロード対象となるサーバー上のファイルパスを指定します。
transfer_mode − 転送モードを指定します。以下のいずれかの値が使用可能です。
・FTP_ASCII(アスキーモード)
・FTP_BINARY(バイナリモード)
beg_pos − ダウンロードを開始するファイル内の位置(オフセット)を指定します。省略可能です。
戻り値
ftp_nb_fget()関数は、以下のいずれかの値を返します。
FTP_FAILED − 送受信に失敗したことを示します。
FTP_FINISHED − 送受信が完了したことを示します。
FTP_MOREDATA − 送受信が進行中であることを示します。
使用例
以下は、ftp_nb_fget()関数を使ってファイルを非同期ダウンロードする例です。FTP_MOREDATAが返される間はループ処理でftp_nb_continue()を呼び出し、ダウンロードを継続します。
<?php
$ftp_server="192.168.0.4";
$ftp_user="jacob";
$ftp_pass="tywg61gh";
$con = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($con, $ftp_user, $ftp_pass);
$my_serverfile = "demo.txt";
$local_file = "new.txt";
$file_pointer = fopen($local_file,"w");
$c = ftp_nb_fget($con, $file_pointer, $my_serverfile, FTP_BINARY);
while ($c == FTP_MOREDATA){
// ダウンロードを継続
$c = ftp_nb_continue($con);
}
if ($c != FTP_FINISHED){
echo "サーバーファイルのダウンロード中にエラーが発生しました!";
exit(1);
}
// 接続とファイルを閉じる
ftp_close($con);
fclose($file_pointer);
?>この例では、まずftp_connect()でFTPサーバーに接続し、ftp_login()で認証を行います。その後、ローカルファイルを書き込みモードで開き、ftp_nb_fget()でバイナリモードによる非同期ダウンロードを開始します。戻り値がFTP_MOREDATAの間はダウンロードが継続中のため、ftp_nb_continue()を繰り返し呼び出します。完了後は戻り値がFTP_FINISHEDになるため、エラー判定を行い、最後に接続とファイルを閉じて処理を終了します。
-
PHPのftp_cdup()関数とは?使い方とサンプルコードを解説
ftp_cdup()関数は、FTPサーバー上の現在のディレクトリを、その親ディレクトリ(1階層上のディレクトリ)へ変更します。サブディレクトリで作業中に、上位の階層へ戻りたい場合に便利な関数です。 構文 ftp_cdup(con); パラメータ con − FTP接続のリソース(ftp_connect()で取得した接続)を指定します。 戻り値 ftp_cdup()関数は、ディレクトリの移動に成功した場合にTRUEを、失敗した場合にFALSEを返します。戻り値を判定することで、移動が正しく行われたかどうかを確認できます。 使用例 以下は、現在のディレクトリを親ディレクトリへ移動させる
-
PHPのftp_alloc()関数とは?使い方とサンプルコードを解説
ftp_alloc() 関数は、FTPサーバーにファイルをアップロードする前に、そのファイル用のディスクスペースを事前に確保するための関数です。内部的にはFTPの「ALLO」コマンドを送信し、サーバー側に十分な空き容量が存在するかどうかを確認できます。対応していないサーバーもありますが、大きなファイルを扱う際にはアップロード失敗の防止に役立ちます。 構文 ftp_alloc(connection, size_of_file, res); パラメータ connection − 使用するFTP接続(ftp_connect() で取得した接続リソース) size_of_file − 確保する容量(