php console更新缓存,PHP 在 Console 模式下的进度显示

关于 的由来

说到换行,大家都知道在在写程序时,提示语的结尾换行,在 Win 下 在 Mac 和 Linux 下 表示,说到这里就要引用下阮一峰大神的一篇关于换行的文章: 回车和换行。

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界;另一个叫做"换行",告诉打字机把纸向下移一行。

凑巧,前两天在知乎也看到了一个关于:为什么会用

两个字符表示换行

[Line Feed]的作用是让打字机的卷轴向前卷一行,而[Return]的作用则是将打印头复位到行首,所以又叫[Cartridge Return(CR)]。

想必到这里,大家应该明白了为什么用

表示换行。

ASCII 码中的

尽管在Win和Unix下换行的表示存在差异,但是在两大系统系列中,[Cartridge Return(CR)] 是一致的,均表示回到行首。

99f1aec69032d59d86471b3d8ba156b8.png

Console 下的进度

因为 (CR,回车) 表示将光标移到行首, (LF,换行) 表示将光标下移一行;所以,我们只将光标移到行首(CR,),不下移一行,就可以将原来此行内容重写。

那么,我们就可以在批量脚本的,单个循环的结束后更新整个脚本的进度,下面以一个文件块的下载为例:

69329dbc579472c66dacef82a324b8bd.png

则效果为:

fbf9aeb9516f5219f98192a5c6f5a552.png

这样,你就可以在自己的脚本中,很方便的实现进度展示了。

其他语言也是类同的,你只需要在提示语的行位添加即可重写本行提示语

有区别的是在不同的系统下,进度条的单位宽度不同,当出现换行,你可以拉宽下你的控制台(TTY)试试。

Symfony 下的 Console

Symfony 是一款优秀的PHP开源框架,其下的组件被广泛应用,其中 Console 组件更甚。

8b5ee47f7ba835a814e1a07201b2800f.gif

Symfony中,显示进度细节,使用 ProgressBar,传给它一个单元(unit)总数,然后在命令执行时,推进(advance)进度:

use SymfonyComponentConsoleHelperProgressBar;

// create a new progress bar (50 units)

// 创建一个新的进度条(50单元)

$progress = new ProgressBar($output, 50);

// start and displays the progress bar

// 启动并显示进度条

$progress->start();

$i = 0;

while ($i++ < 50) {

// ... do some work / 做一些事

// advance the progress bar 1 unit

// 推进进度条一个单位

$progress->advance();

// you can also advance the progress bar by more than 1 unit

// 你也可以用一个以上的单位来推进进度条

// $progress->advance(3);

}

// ensure that the progress bar is at 100%

// 确保进度条达到100%

$progress->finish();

并且支持多种自定义进度的样式(占位符)。

相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值