あなたの助けが必要です。HTML、JQuery、PHP でアップロード スクリプトを作成したいと考えています。非常に大きなファイル (> 5 GB) をアップロードできるスクリプトを作成することはできますか?
FileReader、FormData、Blobs で試してみましたが、これらでも大きなファイルをアップロードできません (大きなファイルを選択するとブラウザがクラッシュします)。
PS: 自分で書きたいです。完成したスクリプトを投稿しないでください。
よろしく
あなたの助けが必要です。HTML、JQuery、PHP でアップロード スクリプトを作成したいと考えています。非常に大きなファイル (> 5 GB) をアップロードできるスクリプトを作成することはできますか?
FileReader、FormData、Blobs で試してみましたが、これらでも大きなファイルをアップロードできません (大きなファイルを選択するとブラウザがクラッシュします)。
PS: 自分で書きたいです。完成したスクリプトを投稿しないでください。
よろしく
はい。1年以上前に、正確に5GBのファイルをアップロードするようにPHPを書きました。
FileReader、FormData、Blob はすべて、アップロード前に前処理と JavaScript での変換が必要なため、失敗します。
しかし、プレーンで単純な XMLHttpRequest を使用すると、大きなファイルを簡単にアップロードできます。
var xhr=new XMLHttpRequest();
xhr.send(document.forms[0]['fileinput']);
これは標準的な方法でも文書化された方法でもありませんが、サポートしている Chrome と Firefox はほとんどありません。ただし、multipart/form-data や http form-data ではなく、ファイルの内容をそのまま送信します。追加情報を提供するには、独自の http ヘッダーを準備する必要があります。
var xhr=new XMLHttpRequest(), fileInput=document.forms[0]['fileinput'];
xhr.setRequestHeader("X-File-Name", encodeURIComponent(getInputFileName(fileInput)));
xhr.setRequestHeader("X-File-Size", getFileSize(fileInput));
xhr.send(fileInput);
PS。まあ、実際にはPHPではありませんでした。PHPとJavaサーブレットが混在していました。
おそらくAXAjaxマルチアップローダーのようなプラグインを使用して「チャンキング」を調べます。これは、クライアント側とサーバー側の両方のファイルサイズ制限に役立つはずです。
大きなファイルのアップロードはあなたと同じであるため、スクリプトがタイムアウトしないように、各スクリプトの最大実行時間と呼ばれるPHP.ini変数(スクリプトのタイミングに関連する)を秒単位で調整することが重要であることに注意してください。max_execution_time = xxxx
時間がかかることを知っています。変数も確認してくださいmax_input_time = xxxx
。これは、各スクリプトがリクエストデータの解析に費やす可能性のある最大時間です。予期せず長時間実行されるスクリプトを排除するために、本番サーバーでこの時間を制限することをお勧めしますが、場合によってはスクリプトを増やす必要があります。次の変数も変更することを検討してくださいmemory_limit
、、upload_max_filesize
post_max_size
問題は、実際には実用的ではないということです。まず、ブラウザの問題が発生したときにアップロードを再開する必要があるという問題があります。これは、大きなファイルをアップロードするときに発生する可能性があります。
Ajax を使用した別のソリューションを次に示します。
Web アップロードが 5 GB 以上の種類のファイルに対して考えられていたとは思いませんし、ブラウザがこの種の情報を喜んで転送するとは思いません。ファイルシステムの制限も問題です。使用シナリオに応じて、ファイルのアップロードを検討/再検討する必要があります。ウェブのみのオプションですか?FTP、ストリーミング、リモート ダンプは、転送中に Web サーバー/Web ページをブロックしないためのより良いソリューションです。HTTP は、これに最適なプロトコルではありません。
ブラウザー、PHP、および Apache はすべてメモリが限られていると考えてください。Chrome が 1 ページあたり 250 MB を超える (通常とは見なされない) 場合、アンチウイルスが警告します。PHP にはデフォルトで 128 MB の専用メモリがあり、100 人の同時 Apache ユーザーが 5GB のファイルをアップロードしていると想像してください。それが彼らがFTPを発明した理由です。
これらの制限が PHP や apache に存在するのはなぜだと思いますか? 攻撃の方法であり、セキュリティの問題であり、サーバーをブロックする方法であり、誰にでも簡単に悪用される可能性があります。