ホームページ > バックエンド開発 > PHPチュートリアル > PHP で大きなファイルをアップロードする

PHP で大きなファイルをアップロードする

WBOY
リリース: 2016-06-23 14:24:51
オリジナル
1077 人が閲覧しました

最近のプロジェクトでは大きなファイルをアップロードする必要があるため、Uploadify の Flash を使用しましたが、100 MB を超えると機能しませんでした。数百メガバイトやギガバイトの大きなファイルの転送をサポートするより良い方法はあるでしょうか?


ディスカッションへの返信(解決策)

まず、大きなファイルをアップロードするときは、php.ini のmemory_limit、max_file_uploads、post_max_size の値を次のように変更する必要があります。少なくともアップロードするファイルのサイズより大きくしてください。

最近のプロジェクトでは大きなファイルをアップロードする必要があるため、Uploadify の Flash を使用してアップロードしましたが、100 MB を超えると機能しませんでした。数百メガバイトやギガバイトの大きなファイルの転送をサポートするより良い方法はあるでしょうか?
これらのパラメータは非常に大きな値に調整されています

それで、現在どのような問題が発生していますか? ?

あなたは今、どのような問題に直面していますか? ?
問題は、uploadify が 100M を超えるファイルのアップロードに失敗することです。 Uplodifyを使用したことがありますか?

最近のプロジェクトでは大きなファイルをアップロードする必要があるため、Uploadify の Flash を使用してアップロードしましたが、100 MB を超えると機能しませんでした。数百メガバイトやギガバイトの大きなファイルの転送をサポートするより良い方法はあるでしょうか? この要件は、サードパーティのコントロールを利用して達成する必要があります。 Uploadify やその他の jqueyr、フラッシュ メソッドでは、100 MB のファイル、さらには数十 MB のファイルをアップロードできません。

最近のプロジェクトでは大きなファイルをアップロードする必要があるため、Uploadify の Flash を使用してアップロードしましたが、100 MB を超えると機能しませんでした。数百メガバイトやギガバイトの大きなファイルの転送をサポートするより良い方法はあるでしょうか? 大きなファイルを転送するにはコントロールを使用する必要があります。

QQ メールボックス、163 メール、DBank ネットワーク ディスク、115 ネットワーク ディスク、360 ネットワーク ディスク、Baidu ネットワーク ディスクをご覧ください。これらはすべてコントロールを使用して実装されています。通常の Flash またはフォーム メソッドでは 100MB のファイルをアップロードできません。また、お客様のネットワーク環境が不安定なため、アップロード処理中にネットワークエラーが発生し、アップロードが失敗する可能性があります。

最近のプロジェクトでは大きなファイルをアップロードする必要があるため、Uploadify の Flash を使用してアップロードしましたが、100 MB を超えると機能しませんでした。数百メガバイトやギガバイトの大きなファイルの転送をサポートするより良い方法はあるでしょうか? インターネット上には、大きなファイルのアップロード用の Web 再開可能なアップロード コントロールがあります: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
このコントロールは、100G ファイルの再開可能なアップロード操作をサポートしており、完全な開発ドキュメントがあり、ファイル MD5 検証をサポートし、ファイルのバッチ アップロードをサポートします。
サポートされているブラウザ: Internet Explorer 6、Internet Explorer 7、Internet Explorer 8、Internet Explorer 9
Maxthon 1.x、Maxthon 2.x、TT ブラウザ、QQ ブラウザ、360 セキュア ブラウザ、
Chrome (Google ブラウザ)、Maxthon3 を確認してください。同じファイルが存在する場合

ファイルを再開

サーバーからファイルリストをロード

ファイルアップロード完了

フォルダーをアップロード
Discuz と統合
ページ呼び出しサンプルコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head>	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>    <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>    <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>    <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>    <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>    <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>    <script language="javascript" type="text/javascript">    	var cbItemLast = null;    	var cbMgr = new CombinBoxMgr();    	$(document).ready(function()    	{    		cbMgr.LoadInControl("FilePanel");    		cbMgr.Init();    	});    </script></head><body>	<div id="FilePanel"></div></body></html>
ログイン後にコピー
ログイン後にコピー

リソースのダウンロード:
cab インストール パッケージ (x86)
cab インストール パッケージ (x64)
crx インストール パッケージ
xpi インストール パッケージ
exe インストール パッケージ
開発ドキュメント
アップグレード ログ
ASP.NET (C# ) サンプル コード:
ASP.NET-ACCESS サンプル
ASP.NET-SQL2005 サンプル
JSP サンプル コード:
JSP-ACCESS-GB2312 サンプル
JSP-ACCESS-UTF8 サンプル
JSP-SqlServer2005-UTF8 サンプル
JSP-MySQL-UTF8 サンプル
PHP サンプル コード:
PHP-MySQL- UTF8 の例
Chrome、Firefox、IE ブレークポイント再開制御の例 (次の例には、IE32、IE64、Firefox、および Chrome プラットフォーム用のプラグインが統合されています)
ASP.NET-ACCESS の例
ASP .NET-SQL2005 の例
JSP サンプル コード:
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SqlServer2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプルコード:
PHP-MySQL-UTF8 の例

Chrome、Firefox、IE 再開可能なアップロードコントロールの例 (次の例には、IE (x86)、IE (x64)、Firefox、および Chrome プラットフォーム用のプラグインが統合されています)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SQL2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP-MySQL-UTF8 の例

まず、php の組み込み関数を使用してみてください。大きなファイルをアップロードするときは、php.ini のmemory_limit、max_file_uploads、post_max_size の値を、少なくともファイルのサイズより大きく変更する必要があります。アップロードしたいファイルを選択します。 PHP の組み込み関数では最大 12 MB のファイルしかアップロードできません。LAN プロジェクトの場合は、PHP の組み込み関数を使用して数十 MB のファイルをアップロードできる場合があります。ただし、100MB のファイルは成功しません。非常に間違いが起こりやすい。

ユーザーが 100MB のファイルをアップロードし、それを 50MB にアップロードするときにネットワーク エラーが発生した場合、アップロードは無駄になります。

Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
このコントロールは、100G ファイルの再開可能なアップロード操作をサポートし、完全な開発ドキュメントとファイル MD5 検証を提供します。 、ファイルの一括アップロードをサポートしています。
サポートされているブラウザ: Internet Explorer 6、Internet Explorer 7、Internet Explorer 8、Internet Explorer 9
Maxthon 1.x、Maxthon 2.x、TT ブラウザ、QQ ブラウザ、360 セキュア ブラウザ、
Chrome (Google ブラウザ)、Maxthon3 を確認してください。同じファイルが存在する場合

ファイルを再開

サーバーからファイルリストをロード

ファイルアップロード完了

フォルダーをアップロード
Discuz と統合
ページ呼び出しサンプルコード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head>	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>    <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>    <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>    <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>    <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>    <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>    <script language="javascript" type="text/javascript">    	var cbItemLast = null;    	var cbMgr = new CombinBoxMgr();    	$(document).ready(function()    	{    		cbMgr.LoadInControl("FilePanel");    		cbMgr.Init();    	});    </script></head><body>	<div id="FilePanel"></div></body></html>
ログイン後にコピー
ログイン後にコピー

リソースのダウンロード:
cab インストール パッケージ (x86)
cab インストール パッケージ (x64)
crx インストール パッケージ
xpi インストール パッケージ
exe インストール パッケージ
開発ドキュメント
アップグレード ログ
ASP.NET (C# ) サンプル コード:
ASP.NET-ACCESS サンプル
ASP.NET-SQL2005 サンプル
JSP サンプル コード:
JSP-ACCESS-GB2312 サンプル
JSP-ACCESS-UTF8 サンプル
JSP-SqlServer2005-UTF8 サンプル
JSP-MySQL-UTF8 サンプル
PHP サンプル コード:
PHP-MySQL- UTF8 の例
Chrome、Firefox、IE ブレークポイント再開制御の例 (次の例には、IE32、IE64、Firefox、および Chrome プラットフォーム用のプラグインが統合されています)
ASP.NET-ACCESS の例
ASP .NET-SQL2005 の例
JSP サンプル コード:
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SqlServer2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプルコード:
PHP-MySQL-UTF8 の例

Chrome、Firefox、IE 再開可能なアップロードコントロールの例 (次の例には、IE (x86)、IE (x64)、Firefox、および Chrome プラットフォーム用のプラグインが統合されています)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SQL2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP-MySQL-UTF8 の例は本当に素晴らしいです。まずはお受けいたします、よろしくお願いいたします。

Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
このコントロールは、100G ファイルの再開可能なアップロード操作をサポートし、完全な開発ドキュメントとサポート ファイル MD5 検証を提供します。ファイルのバッチアップロードをサポートしています。
サポートされているブラウザ: Internet Explorer 6、Internet Explorer 7、Internet Explorer 8、Internet Explorer 9
Maxthon 1.x、Maxthon 2.x、TT ブラウザ、QQ ブラウザ、360 セキュア ブラウザ、
Chrome (Google ブラウザ)、Maxthon3 のインストールパッケージ
GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SqlServer2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプルコード:
PHP-MySQL-UTF8 の例
Chrome、Firefox、IE のダウンロード制御の再開の例 (以下の例) ) プラグインは IE32、IE64、Firefox、および Chrome プラットフォームに統合されています)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP のサンプル コード:
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8例
JSP-SqlServer2005 -UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプル コード:
PHP-MySQL-UTF8 の例

Chrome、Firefox、IE のダウンロード制御の再開の例 (次の例は、IE (x86)、IE を統合しています(x64)、Firefox、Chrome プラットフォーム用プラグイン)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SQL2005-UTF8 の例
JSP -MySQL-UTF8 のサンプル
PHP-MySQL-UTF8 サンプル コントロールは、大きなファイルを転送するのに非常に便利です。前回行った大規模プロジェクトでもこの制御が使われていました。要件は約 10G のファイルです。当初、当社の技術部門の担当者は無料の Flash コントロールを直接使用する予定でしたが、Baidu や Google で多くの記事を検索した結果、それらはすべて無作為に書かれており、基本的に根本的な解決策がないことがわかり、多くの無駄が生じました。当時、いわゆるソリューションのほとんどは、一部の個人の開発者が一時的な興味から書いたアイデアにすぎず、自分たちで検証されていませんでした。その結果、私たちの技術部門は上司に叱られました。

その後、技術部門の人々がテストを行ったところ、Flash コントロールを使用して 10G ファイルを選択した後、ブラウザがハングアップしました。メモリが最大になっていますが、顧客はどのように使用できますか?

結局、このコントロールを引き続き使用しました。正直に言うと、彼らは本当に良い仕事をしており、統合は比較的簡単で、開発ドキュメントも非常に包括的です。最も重要なことは、テクニカル サポート サービスが整備されていることです。企業がオンラインで一部の無料のものを使用することも不可能です。問題がなければいいのですが、問題があった場合に責任をとれる人がいません。


実際のネットワーク環境では、通常、約 30MB のファイルをコントロールの助けを借りて実現する必要があります。それは、国内のネットワーク環境が不安定であることと、サーバーの負荷が原因であることが考えられます。
一般に、当社のウェブサイトユーザーの中には、チャイナテレコムのネットワークを使用する人、チャイナユニコムのネットワークを使用する人、教育ネットワークを使用する人、南部にいる人、北部にいる人がいる可能性があり、この複雑なネットワーク環境によりウェブサイトにアクセスすることがあります。速度が異なります。たとえば、テレコム ユーザーがテレコムのコンピュータ ルームにアクセスする場合、大きなファイルを問題なくアップロードできる人もいます。ただし、チャイナユニコムからチャイナテレコムのコンピュータ室へのアクセスが遅くなる場合があり、大きなファイルをアップロードする際にアップロードのタイムアウトや切断などの問題が発生する可能性があります。

サーバー負荷の問題に関しては、現在の通常のファイルアップロード技術では依然としてサーバーに大きな負荷がかかります。通常の HTML で 1G ファイルをアップロードするには、サーバーは最初に 1G のメモリを割り当て、次に長い接続を開き、クライアントがアップロードを完了するのを待つ必要があります。この期間中に、他のユーザーも 1G ファイルをアップロードしたい場合、サーバーはさらに 1G のメモリを割り当てます。ユーザーが多すぎると、サーバーが問題を処理できなくなることが考えられます。 swfupload やその他の Flash コントロールなどの Flash を使用する場合でも、使用されるテクノロジは通常の HTML と同じです。

Tencent はこの問題を検討しており、コントロールを使用してこの問題を解決しています。このコントロールを使用して、1G などの大きなファイルを多数の小さな部分 (それぞれの小さな部分は約 128 KB) に分割し、アップロードが完了するまでループしてアップロードします。この利点は、サーバーへの負荷が軽減され、サーバーの負荷容量が向上し、サーバーがより多くのユーザー要求を処理できるようになることです。コストも節約できます。


Xproer.HttpUploader5: http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
このコントロールは、100G ファイルの再開可能なアップロード操作をサポートし、完全な開発ドキュメントを提供し、ファイル MD5 をサポートします。検証、ファイルのバッチアップロードをサポートします。
サポートされているブラウザ: Internet Explorer 6、Internet Explorer 7、Internet Explorer 8、Internet Explorer 9
Maxthon 1.x、Maxthon 2.x、TT ブラウザ、QQ ブラウザ、360 セキュア ブラウザ、
Chrome (Google ブラウザ)、Maxthon3 のインストールパッケージ
GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SqlServer2005-UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプルコード:
PHP-MySQL-UTF8 の例
Chrome、Firefox、IE のダウンロード制御の再開の例 (以下の例) ) プラグインは IE32、IE64、Firefox、および Chrome プラットフォームに統合されています)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP のサンプル コード:
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8例
JSP-SqlServer2005 -UTF8 の例
JSP-MySQL-UTF8 の例
PHP サンプル コード:
PHP-MySQL-UTF8 の例

Chrome、Firefox、IE のダウンロード制御の再開の例 (次の例は、IE (x86)、IE を統合しています(x64)、Firefox、Chrome プラットフォーム用プラグイン)
ASP.NET-ACCESS の例
ASP.NET-SQL2005 の例
JSP-ACCESS-GB2312 の例
JSP-ACCESS-UTF8 の例
JSP-SQL2005-UTF8 の例
JSP -MySQL-UTF8 のサンプル
PHP-MySQL-UTF8 サンプル コントロールは、大きなファイルを転送するのに非常に便利です。前回行った大規模プロジェクトでもこの制御が使われていました。要件は約 10G のファイルです。当初、当社の技術部門の担当者は無料の Flash コントロールを直接使用する予定でしたが、Baidu や Google で多くの記事を検索した結果、それらはすべて無作為に書かれており、基本的に根本的な解決策がないことがわかり、多くの無駄が生じました。当時、いわゆるソリューションのほとんどは、一部の個人の開発者が一時的な興味から書いたアイデアにすぎず、自分たちで検証されていませんでした。その結果、私たちの技術部門は上司に叱られました。

その後、技術部門の人々がテストを行ったところ、Flash コントロールを使用して 10G ファイルを選択した後、ブラウザがハングアップしました。メモリが最大になっていますが、顧客はどのように使用できますか?

結局、このコントロールを引き続き使用しました。正直に言うと、彼らは本当に良い仕事をしており、統合は比較的簡単で、開発ドキュメントも非常に包括的です。最も重要なことは、テクニカル サポート サービスが整備されていることです。企業がオンラインで一部の無料のものを使用することも不可能です。問題がなければいいのですが、問題があった場合に責任をとれる人がいません。
従来の HTML 方法は、非常に大きなファイルのアップロードには適していません。 100MB は言うまでもなく、50MB はサーバーにとって非常に大きいため、サービスは専用のソケット接続を開いてファイルがアップロードされるのを待つ必要があるだけでなく、ファイルを保存するために同じサイズのメモリを割り当てる必要があるため、かなりの負荷がかかります。ユーザー数が増加するにつれて、この圧力は幾何級数的に増加します。 Flash を使用する場合でも、現在の Flash はブレークポイント再開操作をサポートしておらず、Flash のアップロード原理も従来の HTML のアップロード原理と同じであるため、機能しません。 Flash を使用して 100MB の画像をアップロードするには、サーバーも 100MB のメモリを割り当てる必要があります。 10 人のユーザーが同時に 100MB のデータをアップロードすると、1G のサーバー メモリが消費されます。
Flash をアップロードすると、ファイル全体がメモリに追加されます。これは深刻な問題です。ユーザーが 5G ファイルをアップロードしたい場合、Flash はすべての 5G ファイルもメモリにロードするためです。これはユーザーの操作体験に重大な影響を与えます。なぜなら、この時点でユーザーのコンピュータは仮死状態になるからです。平均的なユーザーのコンピュータには 2G しか搭載されていないため、メモリ不足またはメモリ オーバーフローが原因で直接ハングします。

一部の友人は、Flash ファイル アップロード コントロールを使用して非常に大きなファイルをアップロードしようとしましたが、アップロード タイムアウトやアップロード エラーが頻繁に発生しました。これは、現在の Flash ファイル アップロード コントロールが従来の HTML アップロード方法と同じテクノロジーを依然として使用しているためです。サーバーが接続を開いて、クライアントがファイルの転送を完了するまで待ちます。ただし、実際のネットワーク環境では、ユーザーのネットワーク速度はわずか 50KB/S で、200MB のファイルをアップロードするのに 2.8 時間かかる場合があります。ただし、サーバーの SESSION 接続がユーザーのために 2.8 時間も待機することは不可能です。これは、パケット損失などの複雑なネットワーク環境を考慮していません。パケットロスやネットワーク異常が発生した場合、ユーザーの以前の 100MB ファイルが無駄に転送されてしまいます。これはユーザーの時間を 1 時間無駄にしていることに相当します。ユーザーに非常に劣悪なエクスペリエンスをもたらします。
サーバーの場合、接続リソースは非常に限られており、サーバーがユーザーを 2.8 時間待機できる場合でも、ユーザーが広範囲にアクセスし、各ユーザーが長時間接続を占有する場合、サーバーの同時処理能力は変化します。低い。他のユーザーが単純な 1KB の HTML ページをリクエストした場合でも、サーバーが前のユーザーのリクエストを処理するまで待たなければなりません。

同時に、Flash は非常に大きなファイルのアップロードのニーズを満たすことができません。非常に大きなファイルをアップロードする必要があるため、データ転送の安定性を確保することが要件の 1 つです。たとえば、ユーザーが 1G ファイルをアップロードし、既に 500MB をアップロードしたとします。このとき、ネットワークが突然切断されました。しかし、ユーザーは、次回ファイルをアップロードするとき、つまり最後にアップロードした位置から送信が開始されることを期待します。 、500MBの位置から送信が開始されます。1つの要件は、Flashではできないことです。

QQ メールボックスの特大添付ファイルのアップロード機能、115 Netdisk、Huawei Netdisk (DBank)、および Kingsoft Express の特大添付ファイルのアップロード コントロールと同様に、これらはすべてコントロールを使用して特大ファイルのアップロード機能を実装しています。これは主に、サーバーへの負荷を軽減し (サーバーの応答時間が速くなり、同時処理能力が強化されます)、サーバーのメモリを節約します (サーバーは各ユーザーのファイルと同じサイズのメモリを割り当てる必要がなくなります)。 、同時にユーザー エクスペリエンスも向上します (ユーザーはネットワーク環境で非常に大きなファイルをアップロードできます)。

もちろん、技術的な観点から、このような有名なインターネット企業は、多数のユーザーをサポートするための分散ファイル ストレージ アーキテクチャの設計も検討しています。ファイル ストレージ サーバーを 1 つにすることはできず、ユーザー数の増加に応じて動的に増加するためです。

一部の友人が言ったように、Flash コントロールが大きなファイルのアップロードの問題を解決できるのであれば、Tencent は QQ メールボックス専用のコントロールの開発にそれほど多くの労力を費やす必要はありません。

サードパーティのダウンロード コントロールを直接ダウンロードするのはあまり便利ではありません。

この問題の原因を教えてください

ありがとう、皆さんありがとう!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート