4

あなたの助けが必要です。HTML、JQuery、PHP でアップロード スクリプトを作成したいと考えています。非常に大きなファイル (> 5 GB) をアップロードできるスクリプトを作成することはできますか?

FileReader、FormData、Blobs で試してみましたが、これらでも大きなファイルをアップロードできません (大きなファイルを選択するとブラウザがクラッシュします)。

PS: 自分で書きたいです。完成したスクリプトを投稿しないでください。

よろしく

4

5 に答える 5

4

はい。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サーブレットが混在していました。

于 2012-10-29T13:12:29.690 に答える
1

おそらくAXAjaxマルチアップローダーのようなプラグインを使用して「チャンキング」を調べます。これは、クライアント側とサーバー側の両方のファイルサイズ制限に役立つはずです。

于 2012-10-29T13:09:23.503 に答える
1

大きなファイルのアップロードはあなたと同じであるため、スクリプトがタイムアウトしないように、各スクリプトの最大実行時間と呼ばれるPHP.ini変数(スクリプトのタイミングに関連する)を秒単位で調整することが重要であることに注意してください。max_execution_time = xxxx時間がかかることを知っています。変数も確認してくださいmax_input_time = xxxx。これは、各スクリプトがリクエストデータの解析に費やす可能性のある最大時間です。予期せず長時間実行されるスクリプトを排除するために、本番サーバーでこの時間を制限することをお勧めしますが、場合によってはスクリプトを増やす必要があります。次の変数も変更することを検討してくださいmemory_limit、、upload_max_filesizepost_max_size

于 2012-10-29T13:09:37.083 に答える
1

問題は、実際には実用的ではないということです。まず、ブラウザの問題が発生したときにアップロードを再開する必要があるという問題があります。これは、大きなファイルをアップロードするときに発生する可能性があります。

Ajax を使用した別のソリューションを次に示します。

PHP 大きなファイルのアップロード
AX-JQuery Uploader

于 2012-10-29T13:11:04.123 に答える
1

Web アップロードが 5 GB 以上の種類のファイルに対して考えられていたとは思いませんし、ブラウザがこの種の情報を喜んで転送するとは思いません。ファイルシステムの制限も問題です。使用シナリオに応じて、ファイルのアップロードを検討/再検討する必要があります。ウェブのみのオプションですか?FTP、ストリーミング、リモート ダンプは、転送中に Web サーバー/Web ページをブロックしないためのより良いソリューションです。HTTP は、これに最適なプロトコルではありません。

ブラウザー、PHP、および Apache はすべてメモリが限られていると考えてください。Chrome が 1 ページあたり 250 MB を超える (通常とは見なされない) 場合、アンチウイルスが警告します。PHP にはデフォルトで 128 MB の専用メモリがあり、100 人の同時 Apache ユーザーが 5GB のファイルをアップロードしていると想像してください。それが彼らがFTPを発明した理由です。

これらの制限が PHP や apache に存在するのはなぜだと思いますか? 攻撃の方法であり、セキュリティの問題であり、サーバーをブロックする方法であり、誰にでも簡単に悪用される可能性があります。

于 2012-10-29T13:15:04.573 に答える