web-dev-qa-db-ja.com

PHPスリープ遅延

PHPでは、ループの各反復にいくつかの2番目の遅延を配置します。

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }

    //sleep for 3 seconds
}

これどうやってするの?

28
Yeak

PHP sleep()関数を使用します。 http://php.net/manual/en/function.sleep.php これは、指定された秒数の間、次のループの実行を停止します。こんな感じ

for ($i=0; $i <= 10; $i++) {
    $file_exists=file_exists($location.$filename);
    if($file_exists) {
        break;
    }
    sleep(3); // this should halt for 3 seconds for every loop
}
52
mavili

私はあなたが何をしているのかを見ています...ファイルシステム上のファイルを常にチェックするためにスクリプトを遅らせています(アップロードされているか、別のスクリプトによって書かれているものと思われます)。これは悪い方法です。

  1. スクリプトはゆっくり実行されます。複数のユーザーがそのスクリプトを実行している場合、サーバーを停止します。
  2. 一部のユーザーではサーバーがタイムアウトする場合があります。
  3. HDDアクセスは高価なリソースです。
  4. これを行うより良い方法があります。

Ajaxを使用できます。タイムアウトを使用して、PHPスクリプトを数秒ごとに呼び出します。これにより、スクリプトの読み込みが遅くなります。また、継続的に実行することができます(現在のforループは33その後停止)。

データベースを使用できます。場合によっては、データベースアクセスはHDDアクセスよりも高速です。特にビューとキャッシュを使用します。ファイルを作成する/ファイルをアップロードするスクリプトは、テーブルにフラグを設定できます(つまり、file_exists)。その後、データベースのそのフィールドをチェックするスクリプトを作成できます。

13
Husman

スレッドを3秒間スリープさせるsleep(3)を使用できます。

Correctionsleepメソッド phpは秒単位

6
devBinnooh

うさぎは、しばらくの間phpスクリプトをスリープさせる2つの方法です。コードがあり、スクリプトの動作を一時停止する場合は、これらの関数を使用します。これらの例では、tコードの最初の部分はスクリプトの実行時に行われ、コードの2番目の部分が行われますが、時間遅延があります。

  1. sleep() 関数を使用すると、スリープ時間を秒単位で定義できます。

例:

echo "Message 1";
// The first part of code.
$timeInSeconds = 3;
sleep($timeInSeconds);
// The second part of code.
echo "Message 2";

これにより、phpスクリプトを3秒間スリープさせることができます。この関数を使用すると、スクリプトを整数(整数)秒だけスリープさせることができます。

  1. sleep() 関数を使用すると、スリープ時間をマイクロ秒単位で定義できます。このスリープ時間は、1秒よりも正確な時間を必要とする間隔に便利です。

例:

echo "Message 1";
// The first part of code.
$timeInMicroSeconds = 2487147;
usleep($timeInMicroSeconds);
// The second part of code.
echo "Message 2";

秒(浮動)よりも小さい時間値でphpをスリープさせたい場合、この関数を使用できます。この例では、スクリプトを2.487147秒間スリープさせました。

1
Nole

PHP supervisorD を使用したデーモンスクリプトを使用することを検討しましたか。常に実行する必要がある複数のタスクで使用します。

問題は、スクリプトを実行するたびにメモリリソースを確認することです。高すぎる場合は、プロセスを停止してから再起動します。

このプロセスを使用して、処理するタスクのデータベースレコードを常にチェックしています。

やり過ぎかもしれませんが、検討する価値があります。

0
davidofadelaide