スクリプトを 30 回使用<?php sleep(60); ?>
した場合、スクリプトがロードされて 30 分で作業が終了する場合、問題はありますか? 問題が発生する可能性はありますか?
注:失敗した場合、このようにする方法はありますか?
3 に答える
クライアントは応答のリッスンを停止する可能性がありますが、スクリプトが実行を完了する可能性は依然としてあります。ただし、実行時間が長くなるように PHP インストールを構成する必要があります。
ブラウザーを使用しており、30 分後に返されるデータを要求する AJAX を使用している場合は、静的リソースをポーリングすることをお勧めします。
スクリプトを開始する場合は、AJAX 要求をスクリプトに送信します。この要求は最終的にタイムアウトになります。完了時に出力を静的リソースに保存するようにスクリプトを設定します (テキスト ファイル / 画像 / など。スクリプトが何を返すかによって異なります)。AJAX を使用して 5 分ごとにこのリソースをポーリングすると、準備ができたときにサーバーから応答が返されます。
この考えにはいくつかの問題があります。
- sleep は、次のコードまたは次のループの実行を
n
数秒間遅らせます。これはスクリプトの「自然な」実行時間の上にあるため、合計実行時間は( sleep(s) * times called ) + execution_time
cgi 環境または php Apache モジュールでスクリプトを実行する場合、デフォルトでは
max_execution_time
、スクリプトが実行を停止するまでに 30 秒かかります。CLI では、デフォルトは 0 =~無制限です。 http://php.net/manual/en/info.configuration.php#ini.max-execution-time最後に、コメントに記載されているように、スクリプトがブラウザーから呼び出された場合、Web サーバーははるかに早くタイムアウトになります。
sleep(60)
30回呼んでも1回呼んでも変わらないsleep(60 * 30)
。
標準は 30 秒程度なので、php 関数set_time_limitを見てください。その後、スクリプトは終了します。
ただし、あなたの要求をそれほど長く待つブラウザがあるかどうかはわかりません。何を達成しようとしていますか?