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 に答える