ftp_nb_fget
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ftp_nb_fget — FTP サーバーからファイルをダウンロードし、オープン中のファイルに保存する(非ブロッキング)
説明
ftp_nb_fget(
FTP\Connection
resource
string
int
int
): int
FTP\Connection
$ftp
,resource
$stream
,string
$remote_filename
,int
$mode
= FTP_BINARY
,int
$offset
= 0): int
ftp_nb_fget() は、FTP サーバーからリモートファイルを取得します。
ftp_fget() との違いは、この関数が 非同期処理でファイルを取得するということです。そのため、 ファイルをダウンロードしている最中に別の処理を行うことができます。
パラメータ
ftp
-
FTP\Connection クラスのインスタンス
stream
-
オープンされているファイルのポインタ。ここにデータが保存されます。
remote_filename
-
リモートファイルのパス。
mode
-
転送モード。
FTP_ASCII
またはFTP_BINARY
のどちらかを指定する必要があります。 offset
-
ダウンロードを開始する、リモートファイル内の位置。
戻り値
FTP_FAILED
、FTP_FINISHED
あるいは FTP_MOREDATA
を返します。
変更履歴
バージョン | 説明 |
---|---|
8.1.0 |
引数 ftp は、FTP\Connection
のインスタンスを期待するようになりました。
これより前のバージョンでは、リソース を期待していました。
|
7.3.0 |
mode パラメータはオプションになりました。
これより前のバージョンでは、このパラメータは必須でした。
|
例
例1 ftp_nb_fget() の例
<?php
// 書き込み用にファイルをオープンする
$file = 'index.php';
$fp = fopen($file, 'w');
$ftp = ftp_connect($ftp_server);
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);
// ダウンロードを開始する
$ret = ftp_nb_fget($ftp, $fp, $file, 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);
}
// ファイルポインタを閉じる
fclose($fp);
?>
参考
- ftp_nb_get() - FTP サーバーからファイルを取得し、ローカルファイルに書き込む(非ブロッキング)
- ftp_nb_continue() - ファイルの取得/送信を継続する(非ブロッキング)
- ftp_fget() - FTP サーバーからファイルをダウンロードし、オープン中のファイルに保存する
- ftp_get() - FTP サーバーからファイルをダウンロードする
+add a note
User Contributed Notes 1 note
pilif at pilif dot ch ¶
20 years ago
If you want to monitor the progress of the download, you may use the filesize()-Function.
But note: The results of said function are cached, so you'll always get 0 bytes. Call clearstatcache() before calling filesize() to determine the actual size of the downloaded file.
This may have performance implications, but if you want to provide the information, there's no way around it.
Above sample extended:
<?php
// get the size of the remote file
$fs = ftp_size($my_connection, "test");
// Initate the download
$ret = ftp_nb_get($my_connection, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
clearstatcache(); // <- this is important
$dld = filesize($locfile);
if ( $dld > 0 ){
// calculate percentage
$i = ($dld/$fs)*100;
printf("\r\t%d%% downloaded", $i);
}
// Continue downloading...
$ret = ftp_nb_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
?>
Philip
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google