私のWebサービスでは、ユーザーはフォームを作成し、友人や同僚にフォームを作成させることができます。収集されたデータは、zipファイルストリームとしてダウンロードできます。ユーザーが大量のデータ(最大2GB)を持っていて、サーバーが明白な理由でphpプロセスを単に強制終了する場合があります。どういうわけか、フラッシュ、Java(ところでJavaはほとんどのユーザーにとっては機能しません)などなしでクライアント側でそのようなファイルを作成することは可能ですか?
3 に答える
Webサーバープロセスを制御できる場合は、これに対する解決策としてx-send-fileを検討することをお勧めします。
本質的には、phpプロセスを終了し、httpサーバーを介してファイルを送信します。このように、時間制限は問題ではなく、phpインスタンスがぶら下がっていません。
スクリプトのタイムアウトとメモリ使用量を増やします。
set_time_limit
関数ドキュメントを使用
パラメータに使用ini_set
しmemory_limit
ます。
もう 1 つの解決策は、クライアントにファイル パーツを提供することです。つまり、レコード数をダウンロードするための制限を与えます。つまり、1-1000、1001-2000 など
ループ内でバックグラウンドで実行し続け、新しいデータをチェックするワーカー シェルを作成します。新しい未処理のデータが見つかった場合は、バックグラウンドでダウンロードを準備します。データをダウンロードする準備ができたら、「準備完了」のフラグを立てて、データが処理され、ダウンロードの準備が整ったことをユーザーに通知します (電子メール、ステータス更新のための ajax 経由のポーリングなど)。
niceを使用して、そのシェルに使用される CPU パワーを制限し、使用可能なすべての処理パワーを消費してサイトが遅くなるのを防ぐことができます。
これは、私のプロジェクトの 1 つでオーディオとビデオの処理を行う方法とまったく同じで、問題なく動作します。