PHP Показывает процент прогона ftp_get?

У меня есть рабочий сценарий загрузки файлов FTP.
Файлы, которые я загружаю, будут составлять около 2-4 ГБ в день.
Мне было интересно, есть ли способ получить процент файла, где он находится?

Я смотрел php.net и здесь, но я не мог найти подобных вопросов и, скорее, тратить больше времени на то, как я полагаю, я бы спросил людей гораздо умнее, чем я.

Я думал о том, есть ли функция, чтобы увидеть, где она находится в процессе загрузки, но я не мог найти ее, так как ftp_get должен был бы закончить сначала, чтобы исключить возможность сброса буфера каждые несколько секунд, чтобы отобразить новый процент.

Кто угодно?

Вот мой код: я спрятал все мои переменные над ним.

 $conn_id = ftp_connect($ftp_server); $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Successfully written to $local_file\n"; } else { echo "There was a problem\n"; } ftp_close($conn_id); 

РЕДАКТИРОВАТЬ:

Я добавил ftp_nb_get и вот для этого мой код. Он сохраняет загрузку в порядке, просто не отсылает ее в браузер.

 $ret = ftp_nb_get($conn_id, $local_file, $server_file, FTP_BINARY, $size); while ($ret == FTP_MOREDATA) { echo round((filesize($local_file)/$server_size)*100)."%\n"; $ret = ftp_nb_continue($conn_id); } 

Related of "PHP Показывает процент прогона ftp_get?"

Попробуйте использовать неблокирующую версию ftp_nb_get() и ftp_nb_continue() в цикле и проверьте размер сохраненного файла.

Он может быть легко реализован с использованием протоколов протокола FTP URL :

 $url = "ftp://username:password@ftp.example.com/remote/source/path/file.zip"; $size = filesize($url) or die("Cannot retrieve size file"); $hin = fopen($url, "rb") or die("Cannot open source file"); $hout = fopen("/local/dest/path/file.zip", "wb") or die("Cannot open destination file"); while (!feof($hin)) { $buf = fread($hin, 10240); fwrite($hout, $buf); echo "\r".intval(ftell($hout)/$size*100)."%"; } echo "\n"; fclose($hout); fclose($hin); 

Что касается ваших попыток с помощью ftp_nb_get :
Размер filesize кэширует результаты, поэтому повторное вызов будет получать одно и то же значение. Вы должны вызвать clearstatcache .

Полный код выглядит так:

 $conn_id = ftp_connect("ftp.example.com"); ftp_login($conn_id, "username", "password"); ftp_pasv($conn_id, true); $local_path = "/local/dest/path/file.zip"; $remote_path = "/remote/source/path/file.zip"; $size = ftp_size($conn_id, $remote_path); $ret = ftp_nb_get($conn_id, $local_path, $remote_path, FTP_BINARY); while ($ret == FTP_MOREDATA) { clearstatcache(false, $local_path); echo "\r".intval(filesize($local_path)/$size*100)."%"; $ret = ftp_nb_continue($conn_id); } echo "\n"; 

В качестве альтернативы используйте ftp_nb_fget и запросите дескриптор файла, как и мой первый пример.

Вы должны попробовать буфер flush – ob_flush () и flush ().

Эта техника работает, я уже использовал ее. вот учебник

Я уверен, что вы можете намочить себя еще немного. Просто google "progress php flush buffer"