php と html5 を使用して 1 つのファイルをアップロードできるファイルのサイズについて何か考えはありますか?
と
これを行うための良いコンポーネントや例について何か提案はありますか?
どうもありがとう!
大きなファイルのアップロードに関しては、特にファイルのサイズよりも高いメモリ制限が必要なため、PHP はかなりお粗末です。同様に、32 ビット システム上の Apache には 2 ギガバイトのファイル制限がある傾向があるため、PHP がアップロードを処理できたとしても、Apache は停止します。
php.ini で upload_max_filesize と post_max_size の値を設定する必要があります。
; アップロードされたファイルの最大許容サイズ。upload_max_filesize = 40M
; upload_max_filesize 以上でなければなりません post_max_size = 40M
php.ini を変更できない場合は、運が悪いです。これらの値は実行時に変更できません。php.ini で指定された値より大きいファイルのアップロードは、実行が ini_set への呼び出しに到達するまでに失敗します。
コア php.ini ディレクティブの説明 を参照してください。
アップロードされるファイルの最大サイズは整数です。整数が使用される場合、値はバイト単位で測定されます
サーバー側では、アップロードの最大サイズは php post_max_sizeとupload_max_filezizeによって制限されます。
また、ウェブサーバーは投稿本文の最大サイズを制限できます。たとえば、デフォルトのApache limitrequestbodyまたはデフォルトの0 = unlimited
nginx client_max_body_size2MB
html5 を使用して大きなファイルをアップロードする予定がある場合は、最近のすべてのブラウザーでサポートされているfile.sliceを参照してください。
ファイル API での .slice のサポート Firefox は、Blob API とそれに付随する .slice API をサポートしています。これは、ファイル全体をメモリにロードすることなく、JavaScript から大きな File オブジェクトの一部を処理したい人に役立ちます。大きなファイルを確実にアップロードする人は、サーバーと JS コードを使用して大きなファイルをセクションに分割し、チャンクをアップロードできます。失敗したセクションを再試行したり、複数のセクションを並行してアップロードしたりすることもできます。
これを使用すると、巨大なファイルをチャンクでアップロードし、それらをサーバー側で再度マージできます。
編集
xhr 経由のストリーミングによる html5 アップロードを説明するこの素晴らしい記事を見つけました
http://www.webiny.com/blog/2012/05/07/webiny-file-upload-with-html5-and-ajax-using-php-streams/
この手順はメモリ使用量が非常に少なく、単一のリクエストで実行されるため、Web サーバーと PHP のアップロード制限に達する可能性があります。コードは、テクノロジー全体がどのように機能するかについてのアイデアを提供する必要があります。
最大ファイル サイズの値は phi.ini ファイルで定義されています。
これを php.ini で検索します
アップロードされたファイルの最大許容サイズ。
upload_max_filesize = 32M