Обновление вывода командной строки, то есть для прогресса

Я бы хотел показать индикатор прогресса в простом скрипте PHP в командной строке. Вместо того, чтобы видеть

Progress: 0% Progress: 1% etc... 

Я бы хотел, чтобы только номер изменился и заменил предыдущий номер, так же, как и git clone, например Resolving deltas: 100% (8522/8522), done. ,

Во время поиска я нашел тот же вопрос, на который ответил Perl , что идеально, но я не смог найти его в PHP. Является ли это возможным? Если нет, я прибегну к C.

благодаря

Обновление: если кто-то заинтересован в версии на C ++, он здесь .

Related of "Обновление вывода командной строки, то есть для прогресса"

Это можно сделать с помощью ANSI Escape Sequences – см. Здесь список.

В PHP вы будете использовать "\033" если на этой странице указано ESC .

В вашем случае вы можете использовать что-то вроде этого:

 echo "Progress : "; // 5 characters of padding at the end for ($i=0 ; $i<=100 ; $i++) { echo "\033[5D"; // Move 5 characters backward echo str_pad($i, 3, ' ', STR_PAD_LEFT) . " %"; // Output is always 5 characters long sleep(1); // wait for a while, so we see the animation } 

Я немного упростил, убедившись, что у меня всегда есть 5 дополнительных символов, и всегда отображаю то же количество данных, чтобы всегда двигаться назад на то же количество символов …

Но, конечно, вы должны быть в состоянии сделать гораздо более сложные, если необходимо 😉

И есть много других интересных escape-последовательностей: цвета, например, могут немного улучшить ваш выход 😉

Только для записи, хотя старый поток: вместо использования фантазии ANSI Escape, чтобы переместить курсор назад, я просто перевежу его обратно в начало строки, используя «\ r», а не в начало следующей строки «\ n» , Добавьте несколько пробелов после вашего эха, чтобы перезаписать все, что было ранее, например, так:

 for ($i=0 ; $i<=100 ; $i++) { echo "Progress: $i % \r"; sleep(1); }