更新命令行输出,即进度
我希望能够在命令行上以简单的PHP脚本显示进度表。 而不是看到
Progress: 0% Progress: 1% etc...
我想只是数字改变,并取代以前的数字,就像git克隆做的例子Resolving deltas: 100% (8522/8522), done.
。
在search这个时,我发现在Perl中回答的问题是完美的,但是我无法在PHP中find它。 可能吗? 如果没有,我会诉诸C.
谢谢
更新:如果任何人对C ++版本感兴趣, 就在这里 。
这可以使用ANSI转义序列完成 – 请参阅此处的列表。
在PHP中,当页面上显示ESC
时,将使用"\033"
。
在你的情况下,你可以使用这样的东西:
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个额外的字符,总是显示相同数量的数据,总是向后移动相同数量的字符。
但是,当然,如果需要的话,你应该能够做得更复杂一些;-)
还有很多其他有趣的转义序列:例如,颜色可以提高你的输出相当多;-)
只是为了logging,而不是使用花哨的ANSI Escapesorting来移动光标,我只是使用“\ r”而不是到下一行的开始将其移回到行的开头“\ n” 。 在你的回声之后添加几个空格来覆盖之前存在的任何东西,例如:
for ($i=0 ; $i<=100 ; $i++) { echo "Progress: $i % \r"; sleep(1); }