@Ofigenen

PHP: как обновить данные в консоли?

Всем трям.
Имеется консольное приложение, выполняющееся ОЧЕНЬ долго. Оптимизировать некуда, переписывать на компилируемый язык для экономии пары минут из часа нет смысла; есть необходимость по крайней мере показывать прогресс выполнения, чтобы проснуться, например, с утра, глянуть в консоль и увидеть, сколько за ночь выполнилось.
Простое
for ($i = 1; $i <= $count; $i++) {
    print $i / count * 100 . '%' . PHP_EOL;
}

выведет прогресс построчно, а циклов таких в приложении с десяток. Нереально отслеживать, что именно в данный момент выполняется. Смотрел функции семейства ob_*, но так ничего с ними и не достиг. Есть ли возможность выборочно заменять данные в консоли? То есть вывести "1%" - дождаться "2%" - стереть "1%" - вывести "2%" ... - вывести "100%"?
  • Вопрос задан
  • 516 просмотров
Решения вопроса 1
DevMan
@DevMan
если по быстрому, то:
echo 'Progress:  ';
for( $i = 0; $i <= 100; $i += 10 ) {
	echo $i, '%', "\033[3D";
	sleep(1);
}
echo PHP_EOL;


если нужно часто/красиво, то google -> php cli progress indicator.
например, https://github.com/guiguiboy/PHP-CLI-Progress-Bar
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
index0h
@index0h
PHP, Golang. https://github.com/index0h
echo "\rI finished 1%";
echo "\rI finished 2%";
Ответ написан
Комментировать
@AlikDex
пиши прогресс в файл после нужной итерации. далее просто читай из файла. Хошь аяксом хороший прогрес бар рисуй, хошь с консоли смотри.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы