のドキュメントを見ただけsleep()です。
この関数をどこで使用しますか?
高価な機能でCPUに休憩を与えるためにありますか?
よくある落とし穴は?
それが使用される 1 つの場所は、遅延を作成することです。
curl/file_get_contentsを使用してリモート ページを取得するクローラーを作成したとします。短時間にあまりにも多くのリクエストをリモート サーバーに送信するのは望ましくありません。したがって、連続するリクエスト間に遅延が発生します。
sleep秒単位で引数を取り、そのフレンドusleepはマイクロ秒単位で引数を取り、場合によってはより適切です。
別の例: リソースを大量に使用するある種のバッチ プロセスを実行しています。おそらく、9,000,000 本のタイトルのデータベースを調べて、そのうちの約 10% を更新しているとします。そのプロセスは日中に実行する必要がありますが、実行する更新が非常に多いため、バッチ プログラムを実行すると、データベース サーバーが他のユーザーのクロールに引きずり込まれます。
したがって、たとえば 1000 件の更新を送信するようにバッチ プロセスを変更し、その後sleep5 秒間、バックアップした他のユーザーからの要求の処理を完了する機会をデータベース サーバーに与えます。
これが私のプロジェクトの1つでどのように使用するかのスニペットですsleep:
foreach($addresses as $address)
{
$url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
$result = file_get_contents($url);
$geo = json_decode($result, TRUE);
// Do stuff with $geo
sleep(1);
}
この場合sleep、サーバーに送信するリクエストが多すぎるため、Googleマップによってブロックされるのを防ぐのに役立ちます。
古い質問ですが、u/sleep を使用するもう 1 つの理由は、認証スクリプトなどのセキュリティ/暗号化コードを記述している場合です。いくつかの例:
編集
タイミング攻撃に対して u/sleep を使用することは、良い解決策ではありません。タイミング攻撃で重要なデータを取得することはできますが、u/sleep が追加するノイズをフィルター処理するためにより多くのサンプルが必要なだけです。
このトピックの詳細については、「ランダム スリープでタイミング攻撃を防ぐことができますか?」を参照してください。
スリープを使用してスクリプトの実行を一時停止できます...たとえば、サーバー側によるAJAX呼び出しを遅らせたり、オブザーバーを実装したりできます。また、遅延をシミュレートするために使用することもできます。
sendmail()&coを遅らせるためにもそれを使用します。。
誰かがsleep()を使用してDoSを防止し、brutefocesにログインすることに同意しません。これは、ユーザーが複数回実行されないようにチェックを追加する必要があるためです。
usleepも確認してください。
通常、Web ページの提供には使用しませんが、コマンド ライン スクリプトには便利です。
$ready = false;
do {
$ready = some_monitor_function();
sleep(2);
} while (!$ready);
超古い投稿ですが、私もコメントしようと思いました。最近、いくつかのファイルを作成する非常に長時間実行されているプロセスを確認する必要がありました。そこで、cURL 関数を反復処理する関数を作成しました。探しているファイルが存在しない場合は、php ファイルをスリープ状態にして、もう一度確認します。
function remoteFileExists() {
$curl = curl_init('domain.com/file.ext');
//don't fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 404) {
sleep(7);
remoteFileExists();
}
else{
echo 'exists';
}
}
curl_close($curl);
}
echo remoteFileExists();
それを使用する別の方法: 毎分より頻繁に cronjob を実行したい場合。これには次のコードを使用します。
sleep(30);
include 'cronjob.php';
このファイルと cronjob.php を毎分呼び出します。
そのアプリケーションの 1 つは、スクリプトを使用して 100 人以上の顧客にメールを送信する場合、この操作に最大 1 ~ 2 秒かかるため、hotmail や yahoo などのほとんどの Web サイトがスパムと見なすため、これを回避するために使用する必要があります。メールのたびに実行が遅れます。
とりわけ、非同期リクエストを行う Web アプリケーションをテストしています (AJAX 呼び出し、遅延画像読み込みなど)。
ローカルでテストしているため、ユーザー (あなた) は 1 人だけであり、ネットワークの遅延がないため、応答は即時です。
を使用sleepすると、負荷とネットワークによってリクエストの遅延が発生した場合に Web アプリがどのように動作するかを確認/テストできます。