2

我想知道是否可以更改特殊 php cli 基础应用程序的某些输出以更改终端上的某些值而不是回显新的值。例如,这是 cli 应用程序。

#!/usr/bin/env php
<?php

$percent = 0;

for ($i = 0; $i <= 100; $i++) {

    echo $percent . "\n";

    sleep(1);

    $percent++;
}

/**
0
1
...
*/

这是一个向用户显示百分比的简单应用程序。所以我们必须在这个例子中的每个循环之后更新它,而不是追加它。我想改变百分比不显示新的。

4

3 回答 3

9

使用\r而不是\n. \r是回车,它会跳回到行首而不换行。

$percent = 0;
for ($i = 0; $i <= 100; $i++) {
    echo $percent . "\r";
    sleep(1);
    $percent++;
}

这适用于 Windows、Linux 和 MacOS

于 2013-01-22T09:12:03.070 回答
2

像这样的东西应该可以满足您的需要(在 Linux(CentOS)机器上测试和验证):

for ($percent = 0; $percent <= 100; $percent++) {
    echo $percent;
    sleep(1);
    // Print one or more backspaces, erasing current character(s)
    echo str_repeat("\x08", strlen($percent));
}
于 2013-01-22T09:34:53.050 回答
1

这实际上取决于您的终端(模拟器)类型,而不是使用的语言。尝试使用退格字符 (0x08) 来“擦除”当前内容,然后输出新内容。

于 2013-01-22T09:12:33.847 回答