5

PHP でファイル アップロードの進行状況バーを作成する方法を知っている人はいますか? 無理だという話はよく聞きます。

私には 1 つの考えがありますが、それが機能するかどうかはわかりません。通常のファイルをアップロードし、代わりに iframe に送信します。これが送信されると、ファイル情報 (サイズと一時的な場所) がセッションに保存されます。同時に、たとえば 10 秒ごとに AJAX 呼び出しを開始して、セッションに保存されているサイズと比較してファイルのサイズを確認します。これにより、サイズが AJAX に返され、進行状況バーのサイズが変更され、アップロードされたサイズがユーザーに表示される場合があります。

考え?

4

9 に答える 9

6

あなたはそれを行う方法をほとんど理解しています。主な問題は、通常、アップロードが完了するまで、アップロードされたファイルのサイズにアクセスできないことです。

これには回避策があります: APC を有効にすると、「APC_UPLOAD_PROGRESS」というフィールドを含めてこの情報にアクセスし、apc_fetch() を使用してキャッシュ エントリとステータスを取得します。

uploadprogress というプラグインもありますが、十分に文書化されておらず、Windows では動作しません (最後に確認しました)。

別の方法として、Flash を使用する方法があります。FancyUploadなどのスクリプトを参照してください。

APC が登場する前は、情報をテキスト ファイルに書き込む CGI スクリプトを C で作成する必要がありました。しかし、今では APC の方がはるかに優れた方法のように思えます。

お役に立てれば。

于 2008-10-01T17:57:26.183 に答える
5

これまでのところ、これを行う最も一般的な方法は SWFUpload です: http://www.swfupload.org/

ただし、純粋な PHP では可能ですが、非常に難しく、非常に実験的です。リンクを見つけることができるかどうかを確認します。

編集: php.net のコメントによると、5.2 の時点で、アップロードの進行状況を処理するためのフックがあります。http://us.php.net/features.file-upload#71564

詳細説明:

ラスムスの例:

于 2008-10-01T17:57:52.717 に答える
3

YUIPrototypeJQueryを試すことができます

于 2008-10-01T19:08:46.090 に答える
1

PHP 5.4 からは、セッション拡張にあります: http://php.net//manual/pl/session.upload-progress.php

于 2014-08-20T12:24:02.900 に答える
0

あなたは間違いなくdigitgerald の FancyUploadを使いたくなるでしょう。これは Mootools と swfuplaod ベースで、ステータス、進行状況、イータなどを含む素敵なキューを備えています。これは、私がファイルをアップロードするために見た中で最も巧妙な方法です。私の個人的な使用例では、クライアントが 1.2 GB の PDF ファイルを選択してアップロードできるようにするために ivé を使用しました。新しいものは自動的に名前が変更され、バージョンが付けられ、同じものはスキップされます。

于 2008-10-01T20:35:58.610 に答える
0

私の意見では、最善/最も簡単な解決策は、「アップロード」ボタンと進行状況バーで構成される小さなフラッシュ ウィジェットを作成することです。Flash は、こ​​れまでにアップロードされたデータの量に関する非常に詳細なフィードバックを提供し、それに基づいて適切な進行状況バーを作成できます。サーバーの非効率的なポーリングを必要とせず、実際、サーバー コードを変更する必要はまったくありません。「フラッシュ アップローダー」を Google で検索すると、多くの人が既にこれらのウィジェットを作成しており、喜んでそれらを 1 ドルで販売できることがわかります。

于 2008-10-01T18:00:34.787 に答える
0

あなたが望むものを達成するためにSWFUploadを見ることをお勧めします。かなり柔軟で、ファイルのキューイングをサポートしているため、複数ファイルのアップロードも処理できます。

于 2008-10-01T18:06:55.927 に答える
0

純粋な PHP では、あなたは正しいです。それは不可能です。

これをAJAX化すると、説明していることを実行できます。私が今まで見たプログレス メーターは Javascript か Flash だけですが、Silverlight でもできると思います。

于 2008-10-01T17:53:39.903 に答える
0

「古い学校」ですが、PHP + Perlの手法: http://www.raditha.com/php/progress.php

于 2008-10-01T17:55:21.290 に答える