В настоящее время я работаю над простой страницей, которая загружает целую папку с ftp-сервера после того, как пользователь вводит идентификатор папки. Немного повозившись, я заставил его работать с командой php system (), вызывающей wget, так как я не смог найти ничего о рекурсивной загрузке с помощью curl.
Файлы иногда довольно большие (3+ gb).
Теперь мне нужно «украсить» вывод, чтобы сайт не был загроможден тысячами строк вывода wget. И пользователь знает, когда загрузка закончилась.
Есть ли способ отображать только последнюю строку вывода system ()? Или еще лучше - индикатор выполнения?
Вот код, который у меня есть:
<?php
header("Content-type: text/plain");
function disable_ob() {
// Turn off output buffering
ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);
// Implicitly flush the buffer(s)
ini_set('implicit_flush', true);
ob_implicit_flush(true);
// Clear, and turn off output buffering
while (ob_get_level() > 0) {
// Get the curent level
$level = ob_get_level();
// End the buffering
ob_end_clean();
// If the current level has not changed, abort
if (ob_get_level() == $level) break;
}
// Disable apache output buffering/compression
if (function_exists('apache_setenv')) {
apache_setenv('no-gzip', '1');
apache_setenv('dont-vary', '1');
}
}
// tell php to automatically flush after every output
// including lines of output produced by shell commands
disable_ob();
$clonestr1 = 'wget -r ftp://someftpserver/' . $_POST["jobid"];
$clonestr2 = '/zip/* -P /outputpath/"jobid/ 2>&1 ';
$complete = $clonestr1 . $clonestr2;
system($complete);
?>
Результат сейчас выглядит так:
Resolving someftpserver (someftpserver)...
Connecting to someftpserver (someftpserver)
connected.
Logging in as ftp_user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /folder/ ... done.
==> PASV ... done. ==> LIST ... done.
0K 3.26K=0.07s
2020-07-12 05:15:40 (3.26 KB/s) - '/outputfolder/.listing' saved [217]
Removed '/outputfolder/.listing'.
--2020-07-12 05:15:40-- ftp://someftpserver/file.zip
=> '/outputfolder/file.zip'
==> CWD not required.
==> PASV ... done. ==> RETR file.zip ... done.
Length: 3293886663 (3.1G)
0K .......... .......... .......... .......... .......... 0% 99.9K 8h56m
50K .......... .......... .......... .......... .......... 0% 278K 6h4m
100K .......... .......... .......... .......... .......... 0% 11.3M 4h4m
150K .......... .......... .......... .......... .......... 0% 11.1M 3h4m
200K .......... .......... .......... .......... .......... 0% 285K 3h5m
250K .......... .......... .......... .......... .......... 0% 11.1M 2h35m
300K .......... .......... .......... .......... .......... 0% 11.1M 2h13m
350K .......... .......... .......... .......... .......... 0% 11.1M 1h57m
.
.
.