質問の種類はそれをすべて言っています-JavaScript関数と同じことをする関数がありますsetTimeout() for[〜#〜] php [〜#〜]? php.netを検索しましたが、見つからないようです...
現在のスクリプト内のコードの一部の実行を遅らせる方法はありません。 PHPスクリプトの処理は完全にサーバー側で行われ、スクリプトの全体的な実行を遅らせるだけなので、あまり意味がありません。sleep()
しかし、それは一定時間プロセスを停止するだけです。
もちろん、cronジョブなどを使用して特定の時間に実行するPHPスクリプトをスケジュールできます。
PHPはイベントドリブンではないため、setTimeoutはあまり意味がありません。あなたは確かにそれをまねることができ、実際、誰かが Timer class を書いているかもしれません。ただし、PHPのサーバー側でこの方法でプログラミングを開始する前に注意が必要です。
sleep
関数があり、一定の時間スクリプトを一時停止します。
usleep
、 time_nanosleep
および time_sleep_until
。
実際はそうではありませんが、 tick count function を試すことができます。
PHPのタイマーについて注意したいことがいくつかあります。
1)PHPのタイマーは、長時間実行されるスクリプト(デーモン、および場合によってはCLIスクリプト)で使用すると意味があります。そのためそのようなアプリケーションを開発していない場合は、タイマーは不要です。
2)タイマーはブロッキングとノンブロッキングになります。sleep()
を使用している場合は、指定した時間だけスクリプトがフリーズするため、ブロッキングタイマーになります。時間。多くのタスクでは、タイマーのブロックは問題ありません。たとえば、10秒ごとに統計を送信します。スクリプトをブロックしても問題ありません。
while (true) {
sendStat();
sleep(10);
}
3)ノンブロッキングタイマーは、websocket-serverのようなイベント駆動型アプリでのみ意味があります。そのようなアプリケーションでは、イベントはいつでも発生する可能性があります(着信接続など)。そのため、sleep()
でアプリをブロックしないでください(明らかに)。この目的のために、 reactphp/event-loop のようなイベントループライブラリがあります。これにより、複数のストリームをノンブロッキング方式で処理でき、タイマー/インターバル機能もあります。
4)PHPの非ブロッキングタイムアウトが可能です。stream_select()
を使用して実装できます。 =タイムアウトパラメータを使用した関数( reactphp/event-loop StreamSelectLoop :: run() での実装方法を参照)。
5)タイマーを許可するlibevent
、libev
、event
などのPHP extensions など)があります実装(ハードコアにしたい場合)
警告:sleep
コマンドでPHPプロセスがハングする、または一定時間「スリープ」することができますが、通常、ユーザーインターフェイス内に視覚的な遅延を実装します。
PHPはサーバー側の言語であるため、通常はHTMLの形式で)実行出力をWebサーバーの応答に書き込むだけです。この方法でスリープを使用すると、通常、応答が停止または遅延します。
そうは言っても、睡眠には実際的な目的がある。接続の失敗後に要求を再試行する場合など、実行を遅らせることでバックオフスキームを実装できます。一般的に、PHPでsetTimeoutを使用する必要がある場合、おそらく何か間違ったことをしていることになります。
Solution:質問に明示的に答えるには:setTimeoutには2つのパラメーターがあり、1つは実行する関数を表し、もう1つは時間(ミリ秒)を表す。次のコードは、質問の機能要件を実際に満たします。
<?php
// Build the setTimeout function.
// This is the important part.
function setTimeout($fn, $timeout){
// sleep for $timeout milliseconds.
sleep(($timeout/1000));
$fn();
}
// Some example function we want to run.
function someFunctionToExecute(){
echo 'The function executed!';
}
// This will run the function after a 3 second sleep =>
// We're using an anonymous function to wrap the function
// which we wish to execute.
setTimeout(function(){
someFunctionToExecute();
}, 3000);
?>
上記のコードの出力は3秒の遅延で、その後に次の出力が続きます。
関数が実行されました!
http://php.net/manual/en/class.evtimer.php はおそらく探しているもので、javascriptのsetIntervalと同様に、間隔を設定するときに呼び出される関数を使用できます。これはpecl拡張機能です。whm/ cpanelがある場合は、peclソフトウェア/拡張機能インストーラページから簡単にインストールできます。
この質問が2010年のものであり、evtimerクラスが2012-2013年にコーディングされ始めたことに気付いていませんでした。古い質問の更新として、javascripts settimeout/setintervalに似たこれを実行できるクラスがあります。
いくつかのphpコードを実行した後にアクションを実行する必要がある場合は、エコーで実行できます
echo "Success.... <script>setTimeout(function(){alert('Hello')}, 3000);</script>";
そのため、クライアント(ブラウザ)でしばらくすると、たとえば別のphpスクリプトへのリダイレクトやアラートのエコーなど、何か他の操作を実行できます。