ftp_nb_get
FTP サーバーからファイルを取得し、ローカルファイルに書き込む(非ブロッキング)
説明
intfalse ftp_nb_get(
FTP\Connection $ftp
,
string $local_filename
,
string $remote_filename
,
int $mode
= FTP_BINARY
,
int $offset
= 0
)
ftp_get との違いは、この関数が
非同期処理でファイルを取得するということです。そのため、
ファイルをダウンロードしている最中に別の処理を行うことができます。
パラメータ
-
ftp
-
FTP\Connection クラスのインスタンス
-
local_filename
-
ローカルファイルのパス(ファイルがすでに存在する場合、上書きされます)。
-
remote_filename
-
リモートファイルのパス。
-
mode
-
転送モード。FTP_ASCII
または
FTP_BINARY
のどちらかを指定する必要があります。
-
offset
-
ダウンロードを開始する、リモートファイル内の位置。
戻り値
FTP_FAILED
、FTP_FINISHED
あるいは FTP_MOREDATA
を返します。
ローカルファイルをオープンできなかった場合は、false
を返します。
例
例1 ftp_nb_get の例
<?php
// ダウンロードを開始する
$ret = ftp_nb_get($ftp, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 何かお好みの動作を
echo ".";
// ダウンロードを継続する…
$ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>
例2 ftp_nb_get でダウンロードを再開する
<?php
// 開始
$ret = ftp_nb_get($ftp, "test", "README", FTP_BINARY,
filesize("test"));
// あるいは: $ret = ftp_nb_get($my_connection, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
// 何かお好みの動作を
echo ".";
// ダウンロードを継続する…
$ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>
例3
ftp_nb_get を用い、ファイルの 100 バイト目以降から
ダウンロードを再開する
<?php
// 自動シークを無効にする
ftp_set_option($ftp, FTP_AUTOSEEK, false);
// 開始
$ret = ftp_nb_get($ftp, "newfile", "README", FTP_BINARY, 100);
while ($ret == FTP_MOREDATA) {
/* ... */
// ダウンロードを継続する…
$ret = ftp_nb_continue($ftp);
}
?>
上の例では、newfile のサイズは FTP サーバー上の
README より 100 バイト小さくなります。なぜなら
ダウンロードの開始位置を 100 バイトずらしたからです。
もし FTP_AUTOSEEK
を無効にしなければ、
newfile の最初の 100 バイトは
'\0'
で埋められます。
参考
- ftp_nb_fget
- ftp_nb_continue
- ftp_fget
- ftp_get