PHPでファイルプログレスバーを作成する
-
03-07-2019 - |
質問
PHPでファイルアップロードプログレスバーを作成する方法を知っている人はいますか?不可能だとよく耳にします。
1つのアイデアがありますが、それが機能するかどうかはわかりません。通常のファイルアップロードを行い、代わりにiframeに送信します。これが送信されたら、セッションにファイル情報(サイズと一時的な場所)を保存します。同時に、10秒ごとにAJAX呼び出しを開始して、セッションに保存されているサイズと比較したファイルのサイズを確認します。これにより、サイズがAJAXに返され、進行状況バーのサイズが変更され、アップロードされたサイズがユーザーに表示される可能性があります。
思考?
他のヒント
あなたはその方法をほとんど理解しています。主な問題は、通常、アップロードが完了するまで、アップロードされたファイルのサイズにアクセスできないことです。
これには回避策があります。 APCを有効にして、「APC_UPLOAD_PROGRESS」というフィールドを含めると、この情報にアクセスできます。ステータスを含むキャッシュエントリを取得するには、apc_fetch()を使用します。
uploadprogressというプラグインもありますが、あまり文書化されておらず、Windowsでは動作しません(最後に確認しました)。
別の方法は、Flashを使用することです。 FancyUpload などのスクリプトを参照してください。
APCが登場する前に、情報をテキストファイルに書き込むCGIスクリプトをCで記述する必要がありました。しかし、APCは今ではもっと良い方法のようです。
これがお役に立てば幸いです。
これまでのところ、これを行う最も一般的な方法はSWFUploadです。 http://www.swfupload.org/
ただし、純粋なPHPでは 可能ですが、非常に難しく、非常に実験的です。リンクが見つかるかどうかを確認します。
編集: php.netのコメントによると、5.2では、アップロードの進行状況を処理するフックがあります。 http://us.php.net/features.file-upload#71564
詳細説明:
- http:// www.dinke.net/blog/2006/11/04/php-52-upload-progress-meter/en/
- http://blog.liip.ch/archive/2006/09/10/upload-progress-meter-extension-for-php-5-2.html
ラスマスの例:
PHP 5.4以降では、セッション拡張機能にあります: http:// php。 net // manual / pl / session.upload-progress.php
純粋なPHPでは、あなたは正しいです。それは不可能です。
これをAJAX化すれば、説明したことを実行できます。私が今まで見た唯一の進捗メーターは、JavascriptまたはFlashにありますが、Silverlightでもできると思います。
" Old school"が、 PHP + Perl の手法: http://www.raditha.com/php/progress.php
私の意見では、最良/最も簡単な解決策は、「アップロード」ボタンと進行状況バーで構成される小さなフラッシュウィジェットを作成することです。 Flashは、これまでにアップロードされたデータ量に関する非常に詳細なフィードバックを提供し、それに基づいて素敵なプログレスバーを構築できます。サーバーの非効率的なポーリングを必要とせず、実際にはサーバーコードへの変更をまったく必要としません。 Googleは「フラッシュアップローダー」を提供しています。多くの人が既にこれらのウィジェットを作成しており、喜んで販売して喜んでいます。
SWFUpload を見て、目的を達成することをお勧めします。かなり柔軟で、ファイルのキューイングをサポートしているため、複数ファイルのアップロードも処理できます。
digitgeraldのFancyUpload を使用することは間違いありません。 Mootools&です。 swfuplaodベースで、ステータス、進行状況、イータなどのキューがあります。これは、実際にファイルをアップロードするために見た最も滑らかな方法です。私の個人的な使用例ではivéクライアントが1.2 GBのPDFファイルを選択してアップロードできるようにするために使用しました。新しいものは自動的に名前が変更されバージョンが付けられ、同じものはスキップされます。