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
ftp_nb_fget
(PHP 4 >= 4.3.0, PHP 5)
ftp_nb_fget — FTP サーバからファイルをダウンロードし、オープン中のファイルに保存する(非ブロッキング)
説明
int ftp_nb_fget
( resource $ftp_stream
, resource $handle
, string $remote_file
, int $mode
[, int $resumepos
] )
ftp_nb_fget() は、FTP サーバからリモートファイルを取得します。
ftp_fget() との違いは、この関数が 非同期処理でファイルを取得するということです。そのため、 ファイルをダウンロードしている最中に別の処理を行うことができます。
パラメータ
- ftp_stream
-
FTP 接続のリンク ID 。
- handle
-
オープンされているファイルのポインタ。ここにデータが保存されます。
- remote_file
-
リモートファイルのパス。
- mode
-
転送モード。FTP_ASCII または FTP_BINARY のどちらかを指定する必要があります。
- resumepos
返り値
FTP_FAILED、FTP_FINISHED あるいは FTP_MOREDATA を返します。
例
例1 ftp_nb_fget() の例
<?php
// ファイルをオープンする
$file = 'index.php';
$fp = fopen($file, 'w');
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// ダウンロードを開始する
$ret = ftp_nb_fget($conn_id, $fp, $file, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 何かお好みの動作を
echo ".";
// ダウンロードを継続する…
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "There was an error downloading the file...";
exit(1);
}
// ファイルポインタを閉じる
fclose($fp);
?>
ftp_nb_fget
pilif at pilif dot ch
16-Nov-2004 05:53
16-Nov-2004 05:53
