問題は、クライアント ブラウザが現在接続されているかどうかに関係なく、長いプロセスで PHP スクリプトが実行し続けることです。クライアントがスクリプトへの Ajax 呼び出しを終了した場合、スクリプトもサーバーで終了する可能性はありますか?
4 に答える
connection_aborted()
PHP関数をチェックしてください。処理中に、対話型スレッド モデルで行うように、中止された接続をチェックして進行を適切にキャンセルすることができます。
このタイムアウトの問題を処理する最も簡単な方法は次のとおりです。
1: サーバーの値を「処理中」に設定します。独立したスレッドを開始して処理を行います。
2: 最初の ajax 呼び出しは成功を返します
3: ページ上の JavaScript は「待機モード」になり、10 秒、30 秒、60 秒、5 分、10 分など (状況に応じて) ごとに新しい ajax 要求を送信して、サーバー上の値がまだ「処理中」に設定されているかどうか。
4: 独立したスレッドが完了します。サーバーの値を「完了」に設定します。
5: ページ上の JavaScript が次の待機モード クエリを作成し、「完了」と適切なデータを返します。
4b: 「完了」せずにわいせつな時間が経過すると、失敗として登録されます。わいせつな時間は状況によって異なります。値を「処理中」から「キャンセル」に更新する ajax 呼び出しを送信します。5b: 独立したスレッドは定期的にステータスをチェックして、まだ「処理中」に設定されていることを確認します。'cancel' へのモード シフトを検出すると、それ自体がキャンセルされます。