PHP ftp_nb_get在下载时获取本地部分文件大小

时间:2015-03-10 12:45:50

标签: php ftp

我的代码:

$conn_id        = ftp_connect($ip_address, $port);
$login_result   = ftp_login($conn_id, $username, $password);

if ((!$conn_id) || (!$login_result)) {
    $p->setProgressBarProgress(0,"Connection error", "red");
}else{
    $size_ftp = ftp_size($conn_id, $file_ftp);

    $ret = ftp_nb_get($conn_id, $file_locally, $file_ftp, FTP_BINARY);
    while ($ret == FTP_MOREDATA) {
        $size_locally = ( file_exists($file_locally) ? filesize($file_locally) : "-");
        $perc = round(($size_locally/$size_ftp)*100);
        $p->setProgressBarProgress($perc, common::formatBytes($size_locally)." of ".common::formatBytes($size_ftp), "orange");
        // Continue downloading...
        $ret = ftp_nb_continue($conn_id);
    }
    if ($ret != FTP_FINISHED) {
        $p->setProgressBarProgress(100,"Download failed", "red");
    }else{
        $p->setProgressBarProgress(100,"Download complete", "green");
    }
}

该行:

$size_locally = ( file_exists($file_locally) ? filesize($file_locally) : "-");

获取初始文件大小,例如:1460(这是1.43 kb),那就是问题所在..文件大小不会根据下载的内容而改变。如果我刷新Windows资源管理器中的文件夹,我可以看到文件大小正在变化,因为它下载更多。如果我在循环时回显文件大小,我看到无穷无尽:1460 1460 1460 1460 1460 1460

我尝试过冲,ob_flush等......不起作用。

在我的脚本顶部,我有这一行:

ob_end_clean();
ini_set('output_buffering', '0');

必须让进度条刷新(有效)。

如何获得最新的文件大小,同时增加大小?

1 个答案:

答案 0 :(得分:0)

<强>更新 http://php.net/manual/en/function.filesize.php请参阅注释“如果您最近在文件中添加了某些内容,并将其关闭,则此方法将不会显示附加数据:”..

  

解决方案:您应该在调用之前插入对clearstatcache()的调用   文件大小()