У меня есть сценарий PHP, который работает в CLI, и я хочу отобразить текущий прогресс процента, таким образом, я задавался вопросом, возможно ли обновить STDOUT для отображения нового процента.
Когда я использую перемотку () или fseek (), это просто бросает сообщение об ошибке.
Смотрите этот код:
<?php
echo "1";
echo chr(8);
echo "2";
Вывод только 2, так как "chr(8)" - это символ для "backspace".
Поэтому просто выведите количество символов, необходимое для возврата назад, и выведите новый процент.
Печать "\r" тоже работает в Linux и Windows, но не подходит для mac
Пример работы:
echo "Done: ";
$string = "";
for($i = 0; $i < 100; ++$i) {
echo str_repeat(chr(8), strlen($string));
$string = $i."%";
echo $string;
sleep(1);
}
Output \r
и затем flush, чтобы вернуться к первому столбцу текущей строки.
Запись в консоль / терминал на удивление сложна, если вы хотите двигаться назад в выходном растре или сделайте что-то вроде добавления цветов - и поведение будет зависеть от типа используемой консоли / терминала. Давным-давно некоторым людям пришла в голову идея построить абстрактное представление терминала и написать для него.
См. эту статью , чтобы узнать, как это сделать в PHP.