もちろん、実際にはアプリケーションとシステムに依存しますが、通常、PHP スクリプトを実行してレポートを定期的に生成する cron ジョブがあります。出力は、ファイルシステムまたはデータベースに保存できます。このようにして、レポートは(ユーザーがダウンロードを試みるたびではなく)一度だけ生成され、必要なときにのみ生成されます(スクリプトは、変更基準に基づいてレポートを生成する必要があるかどうかを確認できます。または、まったく新しいレポートを定期的に生成するように設定するだけです)。本当に簡単にするには、現在の Web ページを wget または curl で呼び出し、Web サーバー上に保存済みレポートをダウンロードするための新しいページを作成します。
このアプローチの唯一の問題は、ユーザーが「古い」レポートをダウンロードする可能性があることです (データは変更されていますが、レポートは更新されていません)。これが本当に問題である場合、別の方法として、PHP スクリプトをバックグラウンドで実行し続け、変更されたデータをチェックし、必要に応じてレポートを生成することもできます。
もう 1 つのアプローチは、ユーザーがレポートをダウンロードしようとしたときにレポートの生成を続行し、結果をキャッシュすることです。ここでも独自のアプリケーション固有の基準を使用して、キャッシュされたレポートがすぐにダウンロードできるかどうかを確認するか、新しいレポートを生成してキャッシュします。定期的に新しいレポートを生成することで、これを最初のアプローチと組み合わせることもできますが、ユーザーが古いレポートをダウンロードしようとすると、すぐに新しいレポートを生成します (ユーザーは 3 ~ 10 秒待たされます)。
最終的には、システムとアプリケーションに依存します。