6

私はコンソールウィンドウにいくつかの出力を行うコマンドラインphpスクリプトを書いています、それはすべて見栄えが良いだけの問題は私がタイプするときです

php myfilename.php -....

コンソールウィンドウでは、完全に実行された後でのみ、結果がウィンドウに出力されます。

私が欲しいのは、以下のようにその場でこれを行うことです

customer id: 1223 skipped.
customer id: 22233 added..

...等

もう1つの質問は、printf関数に\ n\rを追加しても改行されなかったことです...

これらの問題に関するアイデア。

4

3 に答える 3

6

これはおそらく出力バッファリングが原因です。ob_flush()必要に応じて、手動でバッファをフラッシュするために使用できます。

2番目の問題については、Microsoft Windowsでの改行の正しい順序はですが"\r\n"、その逆ではありません。

于 2012-04-23T00:40:42.187 に答える
5

まず、Windowsスタイルの行末マーカーは\r\nではなく\n\rです。これまでに使用されたシステムはそれほど多くありません\n\rが、それらは今では忘れることができるほどまれです。

次に、出力がブロックバッファリングされている可能性があります。これを使用して、すべての出力コマンドの後にコマンドob_implicit_flush(1)を自動的に挿入できます。または、出力をフラッシュする必要がある場合は、手動でflush()呼び出すことができます。flush()

于 2012-04-23T00:44:04.643 に答える
3

End-Of-Lineマーカーについては、常にPHPで定義された定数を使用してください PHP_EOLプラットフォームに基づいて正しく設定されているので、正しいか間違っているかを心配する必要はありません。

[Enter]の問題の場合、出力バッファリングがオンになっている可能性があります。この簡単なテストをスクリプトに追加します。

function test()
{
    $state = array(' added', ' skipped');
    for ($i = 0; $i < 50; $i++)
    {
        echo 'customer id: ' . rand(1, 1000) . $state[rand(0, 1)] . PHP_EOL;
        usleep(50000); // slow it a bit to see the line by line output
    }
}

// without ob -------------------------------------------

$start = microtime(true);
test();
echo 'Finished in ' . round(microtime(true) - $start, 2) . PHP_EOL . str_repeat('-', 78) . PHP_EOL;
sleep(1);

// with ob ----------------------------------------------

$start = microtime(true);
ob_start(); // if called somewhere at the top in your script

// some previous code...
echo 'Line 1'.PHP_EOL.'Line 2'.PHP_EOL.uniqid().PHP_EOL;

// flush the buffer and stop ob
// this will echo whatever is in the output buffer!
//ob_end_flush();

// or, store the current buffer content in a variable and use it later
$output = ob_get_clean();

test();
echo $output;
echo 'Finished in ' . round(microtime(true) - $start, 2) . PHP_EOL . str_repeat('-', 78) . PHP_EOL;

// you could start buffering again, if needed
ob_start();

出力制御機能については、http://www.php.net/manual/en/ref.outcontrol.phpを参照してください。それらは非常に強力なツールです。

それが役に立てば幸い。乾杯!

于 2012-05-06T07:40:27.587 に答える