33

PHP では、ループの各反復に数秒の遅延を設定したいと考えています。

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

    //sleep for 3 seconds
}

これどうやってするの?

4

5 に答える 5

59

関数を使用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
}
于 2013-03-14T16:18:26.617 に答える
13

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

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

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

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

于 2013-03-14T16:39:58.220 に答える
7

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

phpの修正スリープ方法は秒単位です。

于 2013-03-14T16:20:22.767 に答える
0

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

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

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

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

于 2016-05-31T02:03:35.937 に答える