FastCGIの読み取りタイムアウトを無効にする方法はありますか? (fastcgi_read_timeout)
ゼロに設定しても機能せず、ただちにタイムアウトします。
タイムアウトを回避する必要があるのは、使用するシステムによってレポートが生成される方法が原因です。 PHP-FPMではフォークができないため(pctnl_fork()が無効)、リクエストが送信されるとすぐにレポート処理が行われます。これにより、システムによって処理が完了するまで読み取りがハングします。
設定するのが唯一のオプションのようです fastcgi_read_timeout
非常に大きな値(1hや1dなど)に。
問題を解決する方法:
ユーザーがレポートを生成する要求を送信したら、exec("php report.php")
を使用してCLIモードでレポート生成スクリプトを実行します。もちろん、いくつかの識別可能な情報を引数として使用します。
AJAXを使用して、ユーザーの「お待ちください」ページをロードし、レポートが ps w
。使用されているスクリプト名と引数を探します。
完了したら、レポートページにリダイレクトします。
このようにして、待機時間が長くなりすぎた場合にユーザーが更新をマッシュアップするのを防ぎ(実質的にはさらに長くする)、同時にプロセスがまだ実行中であることをユーザーに通知します。