0

しばらく実行できる長時間実行スクリプトがあります。(5秒ごとにメールを送信します)多くのユーザーに。このスクリプトはajaxリクエストを介してトリガーされます

  1. ブラウザが閉じているなどの応答が受信されない場合、スクリプトは引き続き実行されますか?(そうなっているように見えますが、そうでない場合の条件はありますか?

  2. スリープは最大実行時間にカウントされますか?(これも間違っているようです)

4

2 に答える 2

1

1.簡単な答えは:それは異なります。実際、PHPおよび使用するWebサーバーで構成できます。これは、PHPを使用するモード(モジュールまたはCGIなど)によって異なります。ただし、構成できる場合もあります。php.iniには次のオプションがあります。

/* If enabled, the request will be allowed to complete even if the user aborts
; the request. Consider enabling it if executing long requests, which may end up
; being interrupted by the user or a browser timing out. PHP's default behavior
; is to disable this feature.
; http://php.net/ignore-user-abort
;ignore_user_abort = On*/

2.ほとんどの場合、睡眠は重要です。そうでない場合もありますが、その場合は実行時間ではなく実行CPU時間を測定します。IISは、アプリプールごとにCPU使用率をカウントしますが、PHPスクリプトにどのように適用されるかはわかりません。
PHPが現在スリープ状態にあるスクリプトを強制終了しないのは事実です。これは、スリープが終了するとスクリプトが強制終了されることを意味します(簡単なテスト:sleep(15);phpに追加し、最大実行時間を10に設定します。制限時間についてのエラーが発生しますが、10秒ではなく15秒で発生します)。一般に、スクリプトでスリープを自由に使用することに頼る
ことはできません。

Webサーバー内でユーザー(ブラウザー)なしで実行されるスクリプトにも依存しないでください。あなたは明らかに間違った方法で問題を解決しています:あなたは本当にcronジョブ/別々のタスクを使うことを考えるべきです。

于 2013-03-06T21:14:55.193 に答える
0
  1. これはサーバーによって異なります。一部のサーバーは、ソケットが閉じられたときにスクリプトを終了する可能性があり(これは、ブラウザーが閉じられたときに発生する可能性があります)、他のサーバーは、タイムアウトに達するまでスクリプトを実行させる可能性があります。

  2. 繰り返しますが、サーバーに依存します。スクリプトがCPUに負荷をかけたときの実装を実際に見ることができます。また、スクリプトが開始されたのがどれくらい前かを測定することも同様に優れたアプローチです。それはすべて、サーバーソフトウェアを作成している人が何を求めていたかによって異なります。

明確な答えが必要な場合は、スクリプトが実行されているWebサーバーとphp実装のドキュメントをふるいにかけることをお勧めします。

于 2013-03-06T20:46:40.140 に答える