2011-07-27 5 views
3

私は学生の名前どのように私はタイマーでPHPスクリプトを実行できますか?

$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    sleep(3); 
} 

どのように私は、それぞれ3秒、それぞれの名前を印刷することができますを印刷foreachの機能を持っていますか? "echo $name"の後に私はループを止めて3秒待つためのタイマーが必要です。 sleep()ここでは機能しません。他に何ができますか?

+0

見 –

+0

が、これはコマンドライン上またはWebページ上のですか? – Jim

答えて

1

あなたがウェブページでこれを行う必要がある場合は、出力をフラッシュする必要があり、このJavaScriptを使用して、AJAX

またはフラッシュ()関数

<?php 
$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    flush(); 
    sleep(3); 
} 

working demo

+2

それは当てはまりません。たとえそれが悪い習慣だと思っても、あなたはそれを行うことができます。 – Fabio

+0

それは私のためにflush()で動作しませんでした。 – genesis

+0

@Fabio:それは1台のサーバーでは動作しますが、2台目では動作しません。どのように可能ですか? – genesis

3

試して使用してあなたは(確実に)このサーバ側で行うことはできませんflush();

0

flush機能。これは、あなたのトラフィックが途中で保持されたり、バッファリングされすぎる可能性があまりにも高いためです。ウェブサーバー、途中のプロキシ、ブラウザーなどによって、おそらくCLIで動作します。

だから私は間違いなく(必要な場合)、セキュリティを犠牲にすることなく、それをクライアント側の操作を行います。

これは「化粧品」の目的のためだけである場合は、名前の配列を返し、そのタイマーでJavascriptの出力にそれらを持っていますAJAXメソッドを作成することができます。

それとも、あなたはAJAXはタイマーを使用してPHPスクリプトを呼び出すかもしれない、とPHPは、唯一の名前を返します。現在のタイムスタンプをDBまたはSession変数に保存し、しばらく時間が経過するまで新しい名前を返さないようにすることができます。 ob_flush()およびフラッシュ()の

4

echo後にあなたが書くことができ

ob_start();  
$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    ob_flush(); 
    flush();  
    sleep(10); 
} 
関連する問題