67

コマンド ラインの単純な PHP スクリプトで進行状況メーターを表示できるようにしたいと考えています。見る代わりに

Progress: 0%
Progress: 1%
etc...

たとえば git clone のように、番号だけを変更して前の番号を置き換えたいと思いResolving deltas: 100% (8522/8522), done.ます。

これを検索しているときに、同じ質問が Perlで回答されているのを見つけました。これは完璧ですが、PHP では見つかりませんでした。出来ますか?そうでない場合は、C に頼ります。

ありがとう

更新: C++ バージョンに興味がある人は、こちらを参照してください

4

2 に答える 2

110

これは、 ANSIエスケープ シーケンスを使用して実行できます。リストについては、こちらを参照してください。

PHPでは、そのページに"\033"示さESCれている場合に使用します。


あなたの場合、次のようなものを使用できます:

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 文字を追加し、常に同じ量のデータを表示して、常に同じ文字数だけ後方に移動するようにしました...

しかし、もちろん、必要に応じて、もっと複雑なこともできるはずです ;-)

他にも興味深いエスケープ シーケンスがたくさんあります。たとえば、色は出力をかなり向上させます ;-)

于 2011-03-10T20:19:37.753 に答える
83

古いスレッドの記録のためだけに: ファンシーな ANSI エスケープ シーケンスを使用してカーソルを戻す代わりに、次の行の先頭 "\n" の代わりに "\r" を使用して行頭に戻します。 . echo の後にいくつかのスペースを追加して、以前にあったものを上書きします。たとえば、次のようにします。

for ($i=0 ; $i<=100 ; $i++) {
  echo "Progress: $i %   \r";
  sleep(1);
}
于 2016-11-13T09:31:44.420 に答える