header("Content-type: text/plain");
// tell php to automatically flush after every output
// including lines of output produced by shell commands
disable_ob();
$command = 'sudo rsync -arz --progress /home/lokesh/Desktop /home/lokesh/Downloads --stats';
system($command);
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');
}
}
выше мой код дает мне вывод, как это.
ВЫХОД
Desktop /
Desktop / CloudRDP.bat
336 100% 0.00kB/s 0:00:00
336 100% 0.00kB/s 0:00:00 (xfr#1, ir-chk=1055/1057)
Desktop / Песня Дней недели — 7 дней недели — Детские песни от The Learning Station.mp4
32,768 0% 888.89kB/s 0:00:22
5,308,416 27% 5.06MB/s 0:00:02
5,636,096 28% 2.41MB/s 0:00:05
10,846,208 55% 3.20MB/s 0:00:02
15,826,944 80% 3.56MB/s 0:00:01
19,611,127 100% 3.75MB/s 0:00:04 (xfr#2, ir-chk=1054/1057)
Desktop / EnjayEsync Ver 2.4.1.rar
32,768 1% 42.61kB/s 0:00:49
1,277,952 59% 1.22MB/s 0:00:00
2,135,855 100% 1.73MB/s 0:00:01 (xfr#3, ir-chk=1053/1057)
Desktop / EnjayOnlineProductRegistration.sql
32,768 13% 181.82kB/s 0:00:01
235,670 100% 1.05MB/s 0:00:00 (xfr#4, ir-chk=1052/1057)
Но я хочу посчитать номер передачи файла с помощью поиска «XFR #«string. Как это возможно. Я пытался зациклить, но не смог сделать это. Значит после получения этой строки (XFR # 4) это покажет мне вывод 4.
Если вам нужна не только последняя строка вывода команды, то вместо система — выполнить внешнюю программу и отобразить вывод — использование popen — открывает указатель файла процесса — (читать построчно) или exec — выполнить внешнюю программу (чтобы получить массив, заполненный каждой строкой вывода).
Других решений пока нет …