Как вывести из системы php (wget = ...) в одну строку обновления или индикатор выполнения? - PullRequest
1 голос
/ 12 июля 2020

В настоящее время я работаю над простой страницей, которая загружает целую папку с 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
.
.
.
...