0

非常に長時間実行されるリクエストでのみ発生する問題に苦しんでいます。大量のデータをオンデマンドで XML ファイルにエクスポートできる Web アプリケーションがあります。データに応じて、エクスポートはわずか 1 秒から数分で実行されます。少しのデータでエクスポートをテストしたところ、xml の生成とファイルのダウンロードはうまくいきました。次に、大量のデータでテストしたところ、xml の生成に約 30 分かかりました (データベース クエリが多いため)。しかし、この長時間実行される要求の問題は、xml ファイルを生成した後、ダウンロードではなくファイルを再度生成することです。xml の生成を再度実行すると、サイトの読み込みエラーが発生します。より多くのデータと1時間以上のxml生成時間で同じことが起こりました... では、なぜこれが起こっているのですか?この問題は、このような要求が約 30 分以上実行されている場合にのみ発生します。リクエストを再度開始するタイムアウトがある可能性はありますか? ただし、2 番目のファイル生成は、最初のファイル生成が終了した直後に開始され、一定期間が経過した後ではありません。

4

1 に答える 1

2

ただし、2 番目のファイル生成は、最初のファイル生成が終了した直後に開始され、一定期間が経過した後ではありません。

ファイルベースのセッションを使用する場合、セッション ファイルのロックにより、実行中の 1 つの PHP スクリプトのみが一度にそのファイルにアクセスできるようになります。これがブロックの原因となり、現在のスクリプトが終了するとすぐに次の要求が発生する理由となる可能性があります。

大きなエクスポートの場合、1 つのオプションは、何らかの方法でバックエンドで「オフライン」を処理し、完成したファイルをチェックすることです。例: ダウンロードをリクエストし、「キー」をすぐに取得し、php にバックエンドでエクスポートを生成させます。ブラウザは、「キー」のエクスポートが完了したかどうかを確認し続け、準備ができたらダウンロードできます。ユーザーはエクスポートを開始でき、ブラウザが途中で閉じたり、再生成せずに同じエクスポートを複数回ダウンロードしたりする心配がありません。

または、エクスポートが定期的に必要な場合は、cron ジョブから前処理するだけで、エンド ユーザーが新しいデータを必要なときに待機せずにすばやくダウンロードできるようになります。

于 2013-10-10T11:08:38.747 に答える