0

スクリプトの最後にいくつかのハウスキーピング タスクを実行する php スクリプト (通常の LAMP 環境) があります。

私は flush() を使用してすべてのデータをクライアントにプッシュします。これは正常に動作します (ページは完全に読み込まれます) が、ブラウザーはデータ (「読み込み中」のアニメーションで示されます) を待機します。これはユーザーにとって混乱を招きますが、 PHP が flush() の後に追加の出力を生成するかどうかを Apache が認識できないため、コースは明確です。ただし、私の場合は生成されません。

スクリプトが実行され続けていても、出力が終了し、http 接続をすぐに閉じる必要があることをクライアントに伝える方法はありますか?

4

2 に答える 2

0

さまざまなタスクを実行する実行時間の長いスクリプトがあるようです。特に、スクリプトがクライアントに応答を送信した後も処理を続行しているように見えます。これは、多くの潜在的な問題を引き起こす設計です。アーキテクチャを再考する必要があります。

ハウスキーピングのタスクとクライアントとのコミュニケーションは厳密に分けてください。たとえば、クライアント リクエストを処理し、内部サブ リクエスト (デタッチ可能) をトリガーしたり、タスクを cron のようなシステムに委任したりできます。次に、それらのタスクの進行状況と結果を視覚化する 2 つ目のビューをクライアントに提供します。このアプローチは、はるかに安全で、柔軟性が高く、必要に応じて簡単に拡張できます。そして、当面の問題も解決されます:-)

于 2013-04-15T05:20:08.533 に答える
0

この関数fastcgi_finish_request()の特別な関数を使用して、時間のかかる処理 (ビデオの変換、統計処理など) を続行しながら、要求を終了してすべてのデータをフラッシュすることができます。http://php.net/manual/en/install.fpm.phpただし、そのためには FPM をインストールする必要があります

<?php
 echo "You can see this from the browser immediately.<br>";
 fastcgi_finish_request();
 sleep(10);
 echo "You can't see this form the browser.";
?>
于 2013-04-15T05:39:30.520 に答える