14

この問題は、悪名高い2GBの制限に直接関係しているようで、32ビットのPHPの問題であるかどうかはわかりません。HTTPがそのような大きなファイル用に設計されていないことに関連するコメントを見てきました。ただし、これまでに機能することが証明されているものに対する根本的な変更を決定する前に、この方向性を使い果たしたいと思います。タイトルが示すように、2GBを超えるファイルをアップロードする必要があります。これは、これまでで最大の3.8GBです。jQuery-file-uploadを使用して作成されたフォームがありますが、これらの大きなファイルが開始されるまで、ファイル(2GB未満)の送信に問題はありませんでした。3.8GBのものはFile-Uploadからアップロードするのにおそらく5分かかり、プログレスバーは100%まで完了します。ただし、アップロード後に報告されたエラーはタイプ1であり、ファイルサイズの制限に違反していることを示しています。

アップロード中にサーバーのディスク使用量を監視すると、次のサンプルプロパティが表示されます。アップロード前のディスクは30%使用され、アップロードが続行されると、この使用量は31%、32%.... 45%、46%増加します。等 ただし、約2GBの時点で、クライアント/ブラウザのファイルアップロードが続行されている間、ディスク使用量は30%に戻ります。サーバーのディスク使用量の増加が停止すると、クライアントはアップロードの60%にすぎない可能性があります。それでも、クライアントは引き続き100%になりますが、ディスクのステータスが30%になることはないため、サーバーによって受け入れられていません。

私は64ビットUbuntu(最新)をApache / 2.2.22(Ubuntu)とPHPバージョン5.3.10-1ubuntu3.2で実行しています。解決策を何日も探し続けても、変更後も3.8GBのファイルをアップロードできません。非常に多くの設定。以下にそのような変更をリストしますが、この段階では32ビットのPHPの問題である可能性があるため、フォローする価値のあるリンクまたは試す価値のある解決策を誰かが提案できる場合は、それをいただければ幸いです。

Apache2では、次のように設定しました。

- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
    - LimitRequestBody to 4939212390
    - php_value upload_max_filesize 4831838208
    - php_value post_max_size 4939212390

php.iniで、次のように設定しました。

- UPLOAD_MAX_FILESIZE 4831838208
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M

サーバーで次のコマンドを実行すると、PHPに32ビットの問題がないように見えますが、この段階ではわかりません。

php -r "echo PHP_INT_MAX;"
9223372036854775807

私が述べたように、どんなアイデアでも大歓迎です。

アップデート:

この問題は解決したので、基本的なアプローチに戻ることを提案してくれた@BogdanBurimに感謝します。

次の設定で、HTTP経由で3.8GBのファイルをアップロードできました。

Apache2では、次のように設定しました。

- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390
- .htaccess in the php temp directory (in my case its /tmp/) I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390

php.iniで、次のように設定しました。

- UPLOAD_MAX_FILESIZE 0
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M

このソリューションの他の唯一の重要な部分は、アップロードフォームからMAX_FILE_SIZE、HTMLを削除する必要があることでした。

<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" />

この設定を行うと、PHPタイプ2エラーが継続的に発生するため、phpは設定されている32ビットを超える整数を処理できませんでした。これを削除すると、UPLOAD_MAX_FILESIZEをどこでも0に変更するまで、PHPタイプ1のエラーが発生しました。これで、動作するようになりました!!!!

http://php.net/manual/en/features.file-upload.errors.php

4

3 に答える 3

6

この問題は解決したので、基本的なアプローチに戻ることを提案してくれた@BogdanBurimに感謝します。

次の設定で、HTTP経由で3.8GBのファイルをアップロードできました。

Apache2では、次のように設定しました。

- apache2.conf I've set Timeout to 900
- httpd.conf I've set LimitRequestBody to 0
- .htaccess in the file upload directory I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390
- .htaccess in the php temp directory (in my case its /tmp/) I've set:
    - LimitRequestBody to 0
    - php_value upload_max_filesize 0
    - php_value post_max_size 4939212390

php.iniで、次のように設定しました。

- UPLOAD_MAX_FILESIZE 0
- POST_MAX_SIZE 4939212390
- max_execution_time 120
- max_input_time 60
- memory_limit 128M

このソリューションの他の唯一の重要な部分は、アップロードフォームからMAX_FILE_SIZE、HTMLを削除する必要があることでした。

<input type="hidden" name="MAX_FILE_SIZE" value="4939212390" />

この設定を行うと、PHPタイプ2エラーが継続的に発生するため、phpは設定されている32ビットより大きい整数を処理できませんでした。これを削除すると、UPLOAD_MAX_FILESIZEをどこでも0に変更するまで、PHPタイプ1のエラーが発生しました。これで、動作するようになりました!!!!

http://php.net/manual/en/features.file-upload.errors.php

于 2012-11-29T16:39:20.387 に答える
0

apache virtualhost構成にアクセスできる場合は、特定のアップロードURLに対してこれらの設定を変更することもできます(これを.htaccessファイルに追加することもできます)。

このコードで:

<LocationMatch "/index.php/url-of-your-upload.php">
    php_value max_execution_time 0
    php_value upload_max_filesize 0
    php_value post_max_size 4939212390
    php_value memory_limit 4G
    LimitRequestBody 0
</LocationMatch>

LocationMatchディレクティブを使用すると、URLを選択できます(正規表現を使用できます)

于 2013-11-05T09:52:32.290 に答える
-7

問題は、なぜブラウザを使用して1GBを超えるアップロードを行うのかということです。トップファイル共有サービスは、ブラウザ経由でファイルのアップロードサイズを1GBに制限することを検討してください。ユーザーのダウンロードが失敗した場合は、プロセス全体を再起動する必要があります。

あなたがそのような大きなファイルアップロード、急流、ftpまたはrapidshare、fileupload、megauploadなどのような個人的なアップロードクライアントを持っているなら、あなたは代替案を調べましたか?

POSTに設定されたファイルサイズ制限のため、制限があります。HTTPを使用して大きなファイルをアップロードすることにした場合、最適な解決策は、ファイルを分割し、分割された小さな部分をアップロードしてから、ファイルを再組み立てすることです。

于 2012-11-26T23:04:37.687 に答える