2011-09-17 4 views
2

私は、複数のソースからスクレイプされた情報をコンパイルし、それらを整理し、データベースにキャッシュする、長時間実行しているPHPスクリプトを開発しています。PHP:ランタイム中にステータスメッセージを出力する

このスクリプトのランタイムは非常に高いので、進行状況を追跡するために、の実行状況レポートを印刷したいと思います。

for ($i = 1; $i<= 10; $i++) { 
    echo "Starting iteration #$i\n"; 
    set_time_limit(40); 
    echo "Time Limit set, starting 10 second sleep.\n"; 
    sleep(10); 
    echo "Finishing iteration #$i\n\n"; 
} 
echo "Iterations Finished."; 

だろう出力:

開始反復#1

タイムリミットセット、開始10秒スリープ

その後、10秒待ってから、出力:

Finis完成

反復:PHP構文解析が終了する直前に、それが出力する、その後

10秒のスリープを開始し、#2

タイムリミットセット反復の開始#1

反復の興。

これを達成する最も良い方法は何ですか?

+4

質問は何ですか? – mithunsatheesh

答えて

3

あなたが使用して、スクリプト 最後まで待つことなく、あなたが直接stdoutに出力することができますCLIからPHPを実行している場合:

CGIから実行する場合
$handle = fopen('php://stdout', 'r'); 
fwrite($handle, $output); 

、本当に悪いことと思われますこのようなスクリプトでは、バッファがflush()でどのように動作するかを変更する必要があります。

+0

私のPHPは現在CGIとしてインストールされていますが、何が悪いですか? –

+0

'function flush2(){ echo(str_repeat(" '、256)); if(ob_get_length()){ @ob_flush(); @flush(); @ob_end_flush(); } @ob_start(); } '私の場合の解決策でした。 –

+0

なぜ、私の現在の環境で 'echo'呼び出しがバッファされていたかわからないので、スクリプトが終了したときだけ出力を取得します。あなたの解決策は、 'fwrite'からstdoutへのメッセージがすぐに表示されるので助けになりました。 – userlond

1

この質問ごとに、AJAXを使用してファイルのライブアップデートを表示して、ファイルに実行時のステータスレポートを書いてみます。Live feed of an updating file

関連する問題