まず、ignore_user_abortを探していません。代わりに、出力を完成させてドキュメントをユーザーに送信する関数を探します。その後、phpスクリプトで追加のプロセスを実行します。このプロセスには、ユーザーに影響を与えることなく、バックグラウンドプロセスのみでさらに数秒かかります。
ユーザーがこれが完了するのを待つ理由もありません。出力は、すでに追いつく準備ができています。PHPはユーザーへの接続を閉じる機能を提供しますが、作業を完了するためにサーバーにしばらく留まりますか?
php-fpmの最高の機能の1つはfastcgi_finish_requests()です。これにより、クライアント側のセッションが終了し、サーバー側でプロセスが続行されます。また、cronによるquequeまたは遅延処理の代替としてのメッセージングの最適なユースケースです。
ただし、php-fpmに制限されています!
作業を2つのファイル(初期処理で出力を生成するファイル)と、さらに数秒かかるがユーザーに完了まで待たせない重いファイルに分割する必要があります。
次に、ブラウザにAjaxまたは非表示のいずれかを使用して呼び出しさせますiframe
。
2番目のスクリプトで成功/失敗の通知を返し、JavaScriptでそれをキャッチして、実際の初期出力に影響を与えることなく、ユーザーに通知することもできます。
あなたが欲しいものはいくつかのajaxのもののように見えます。応答をユーザーに返送すると、スクリプトは終了します。ただし、javascriptを使用すると、ユーザーにとって何も変更されない別のphpスクリプトへのajax呼び出しを開始できます。
を使用curl();
してローカルホストにpingを実行し、別のスクリプト実行をトリガーして、追加のタスクを実行することができます。
スクリプトが実行されたら、キューテーブルにエントリを追加します。次に、cronジョブを実行してキューを処理し、レコードをロックして、処理時に削除します。これにより、cronが重複しても、同じジョブが2回実行されることはありません。