Мой код:
$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
Я пробовал flusing, ob_flush и т. Д. Не работает.
В верхней части моего сценария у меня есть эта строка:
ob_end_clean(); ini_set('output_buffering', '0');
Что необходимо, чтобы обновить индикатор выполнения (который работает).
Как я могу получить последний размер файла, а его прирост в размере?
UPDATE: http://php.net/manual/en/function.filesize.php См. Комментарий «если вы недавно добавили что-то в файл и закрыли его, тогда этот метод не будет показывать добавленные данные:« ..
Решение. Вы должны вставить вызов clearstatcache () перед вызовом filesize ()