ホームページ >バックエンド開発 >PHPチュートリアル >即時応答を送信した後にバックグラウンドで PHP 処理を実行するにはどうすればよいですか?

即時応答を送信した後にバックグラウンドで PHP 処理を実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-12 14:17:11651ブラウズ

How Can I Perform Background PHP Processing After Sending an Immediate Response?

応答送信後の PHP 処理の処理

メッセージ ID とテキストを含むリクエストをサーバーから受信する場合、スクリプトは多くの場合、情報とテキストを処理する必要があります。応答を生成します。ただし、応答をすぐに送信すると、サーバー メッセージが配信済みとしてマークされ、それ以上の処理ができなくなる可能性があります。これは、即時応答の生成を必要とするが、継続的なバックエンド操作を必要とするアプリケーションでは問題になる可能性があります。

解決策: 出力バッファリングによる遅延処理

この問題に対処するには、既知の技術が使用されます。出力バッファリングを使用できるためです。このアプローチには、次の手順が含まれます。

  1. 遅延実行を有効にする:

    • ユーザーのアクションによって中断されるのを防ぐために、ignore_user_abort(true) を呼び出します。 script.
    • set_time_limit(0) を設定して、時間制約。
  2. バッファ応答出力:

    • ob_start() を使用して応答のバッファリングを開始します。出力。
  3. 部分応答の送信:

    • 必要なデータを処理し、初期応答を生成し、それを次を使用してエコーします。エコー$response.
  4. 出力ヘッダーをフラッシュします:

    • 次のヘッダーを送信します:

      • Connection: close は、応答が返された後に接続が閉じることを示します。
      • Content-Length: .ob_get_length()` でバッファリングされた出力の長さを指定します。
  5. 完全な応答送信:

    • 呼び出しob_end_flush() および @ob_flush() は、バッファリングされた出力をフラッシュします。
    • 残りの出力をブラウザに送信するには、flush() を呼び出します。
    • PHP-FPM の場合 (PHP > 5.3.3) )、fastcgi_finish_request() を呼び出して完了します。 request.
  6. 処理続行:

    • スクリプトは、応答がサーバーに送信されている間も処理を続行できるようになりました。

追加の考慮事項:

  • 確実に実行を完了するには、die() を使用してスクリプトを明示的に終了します。特に set_time_limit=0 が使用されている場合。
  • この手法により、スクリプトは常に実行されます。バックグラウンド。サーバー リソースを消費する可能性があります。

以上が即時応答を送信した後にバックグラウンドで PHP 処理を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。