0

Dropzone.js と Dropbox API を使用して、最大 10G のファイルを受け入れることができるドラッグ アンド ドロップ Web インターフェイスをセットアップしようとしています。最大 50M までのファイルで完全に機能しますが、それ以降は 413 Request Entity Too Large エラーで失敗します。私が試したサンプルファイルは1.5Gです。大きなファイルのアップロード用に変更するために知っていることを試しましたが、まだ機能していないようです。私のPHP設定を見て、誰かが私を正しい方向に向けてくれることを願っています。

関連するレンダリングは次のphpinfo()とおりです。http://codepen.io/jboneca/pen/bNvEwV

追加情報:

  • サーバーにファイルが保存されることはありません。ファイルは Dropbox に直接アップロードされます (ほとんどの場合、正常に実行されます)。
  • Dropzone でのファイル サイズ制限が無効になりました。
  • 次の設定が変更されましたが、役に立ちませんでした。upload_max_filesize、、、、、。post_max_size_ max_execution_time_ max_input_time_ memory_limitおそらく、それらはさらに大きくする必要がありますか?
4

1 に答える 1

2

注意すべき点がいくつかあります。

  1. php でファイルのアップロードを処理する場合、スクリプトがファイルを保存せずに Dropbox API に送信するだけの場合でも、php はサーバー上の一時的な場所にファイルを書き込む必要があります。 tmp/一時ファイル名。したがって、一時的なものであっても、サーバーにはファイルを保存するのに十分なスペースが必要です。次に、スクリプトは Dropbox API を介してファイルをアップロードし、PHP は一時的な場所からファイルを自動的にクリーンアップ/削除します。
  2. 413 Request Entity Too Large エラーは、通常、post_max_size がリクエストを処理するのに十分な大きさでない場合に発生しますが、あなたのケースでは、それを制限する他の問題もある可能性があります。
  3. 大量のデータを処理するコマンド ライン php スクリプトを実行した私の経験では、php のメモリ制限は 1700M ~ 2000M あたりで壊れ始めます。つまり、memory_limit をはるかに高い値に設定した後でも、php 自体はそれほど大きなメモリ制限のチェックを処理できず、メモリ使用量が約 1800M を超えると失敗します。(メモリ制限に符号付き 32 ビット int を使用している可能性がありますか?よくわかりません。)
  4. 私は Dropzone.js + php ファイルのアップロードの組み合わせでも作業しましたが、数百 MB のファイルをアップロードしても問題はありませんでした。これを試すことをお勧めします: upload_max_filesize を 1100M に設定し、post_max_size を 1200M に設定し、memory_limit を 1700M に設定します。ここで、最初に 100MB、次に 500MB、次に 1GB のファイルを試してください。これらすべてのサイズで機能すると思います。次に、各設定を高く調整して、1.5 GB にどれだけ近づけるかを確認します。それはおそらく、あなたが持っている現在のphpバージョンとサーバーの制限です.
  5. 参考までに、エラーが 413 Request Entity Too Large であった場合、max_execution_time は問題ではありません。(まだそこまで行っていません) これは、php スクリプトのすべての行を実行するのにかかる時間です。(ファイルをサーバーにローカルに保存していた場合、1 GB のファイルをアップロードしても、この時間はミリ秒単位になります。) ただし、このファイルをサーバーから Dropbox API に送信する必要があるため、リクエストに時間がかかる可能性があります。長すぎて max_execution_time 制限を超えています。アップロードに関する現在の問題を解決した後、これで問題が発生すると思います。これを解決するには、http リクエストを処理する php スクリプトを使用して、ファイルをどこかのキューに単純に追加し、キューから読み取ってファイルを Dropbox にアップロードする別のコンシューマ プロセスを用意することをお勧めします。(また、おそらくユーザーにとってより良い UX であるため、ユーザーはそうしません。
于 2015-02-18T23:21:46.270 に答える