2

アプリがあります。これにより、ajax を介して一度に複数のファイルをアップロードできます。これは大きなファイルを対象としていますが、2 GB 以上になると次のようなエラーが発生します。

[Fri Feb 01 11:22:56 2013] [error] [client x.x.x.x] PHP Fatal error:  Out of memory (allocated 2331770880) (tried to allocate 1165449891 bytes) in Unknown on line 0, referer: ...

私のphp.iniには、次の構成があります。

post_max_size = 53687091200M
upload_max_filesize = 53687091200M
max_input_time = -1
memory_limit = -1
max_execution_time -1
max_file_uploads = 20

私の知る限り、これは 3GB のアップロードを処理するのに十分なはずです。しかし、ほとんどすべての試行で、これらのエラーが発生します。VPS のサポートに相談したところ、すべて問題ないようで、処理できるはずだと言われました。

nginx リバース プロキシのセットアップが少し役に立ちましたが、十分ではありません。何か不足していますか?

PHP で HTTP の負荷を軽減する方法はありますか? Java アプリをテストしたところ、すばらしいパフォーマンスを発揮しましたが、(残念ながら) UI をそのままにしておく必要があります。

4

1 に答える 1

2

非常に大きなファイルをアップロードする場合は、ファイルを PHP に渡す前に「プロキシ」することをお勧めします。私の経験では、長寿命の PHP スレッドが予期せず爆発する可能性があり、PHP が大きなメモリ割り当てで問題を起こすことがあります。

nginx のアップロード進行状況モジュールを見てください。これは、ファイルをアップストリーム サーバー (この場合は PHP) に渡す前にディスクにバッファリングし、進行状況を監視および報告するメカニズムを提供するという追加の利点があります。

それでも問題が解決しない場合は、アップロード モジュールを使用して、(アップロードの管理に関する限り) PHP を方程式から完全に取り除くことができます。ファイルをディスク上の必要な場所に直接ダンプし、その場所を PHP に通知するだけです。

于 2013-02-05T15:48:23.660 に答える