82

PHPでアップロードの進行状況バーを取得する方法を知っている人はいますか? フォト アルバム アップローダのコードを記述しようとしています。写真のアップロード中にプログレスバーを表示したいと思います。

私はphpにかなり慣れていないので、それについてすべてを知りません。

4

10 に答える 10

70

これは、私が見つけた中で最も設定が簡単で、最も優れたアップローダーです。

https://github.com/FineUploader/fine-uploader

APC やその他の外部 PHP ライブラリは必要ありません。共有ホストでファイルの進行状況のフィードバックを取得できます。また、html5 のドラッグ アンド ドロップ (個人的には未テスト) と複数のファイルのアップロードをサポートしていると主張しています。

于 2010-10-16T23:06:22.163 に答える
13

APCがインストールされている場合は、アップロードの進行状況を確認するためのコールバックフックがあります。

Rasmus Lerdorf(PHPの作成者)は、 YUIを使用したこのサンプルを持っています(ああ、これがPHPソースです)。

こちらのドキュメントを参照してください。

于 2010-01-21T18:44:17.227 に答える
12

申し訳ありませんが、私の知る限り、純粋な PHP アップロード プログレス バー、または PHP/Javascript アップロード プログレス バーでさえも、PHP の仕組みにより不可能です。最善の策は、何らかの形式の Flash アップローダを使用することです。

AFAIK これは、$_FILES を含むすべてのスーパーグローバルが読み込まれるまでスクリプトが実行されないためです。PHP スクリプトが呼び出されるまでに、ファイルは完全にアップロードされます。

編集:これはもはや真実ではありません。2010年でした。

于 2009-05-11T17:54:02.407 に答える
8

私にとってうまくいったPHPっぽい(5.2+)&フラッシュなしの方法:

まず、「uploadprogress」拡張機能を起動して実行する方法を説明しているこの投稿を参照してください。

次に、ファイルのアップロード元のフォームを含むページで、次の iframe を作成します。

<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>

次に、このコードを [送信] ボタンに追加します。

onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);"

これで、フォームに非表示の iframe が表示され、[送信] をクリックしてファイルのアップロードを開始すると、uploadprogress.php の内容が表示されます。$upload_id は、フォームの非表示フィールド「UPLOAD_IDENTIFIER」の値として使用しているものと同じでなければなりません。

uploadprogress.php 自体は次のようになります (必要に応じて修正および調整します)。

<html>
<head>
<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
</head>
<body>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>
</body>
</html>

は毎秒セルフリフレッシュされることに注意してください。必要に応じて、ここに素敵な視覚的な進行状況バー (異なる色の 2 つのネストされた <div> など) を追加できます。アップロードの進行状況を示す iframe は、当然、アップロードの進行中にのみ機能し、フォームが送信されてブラウザーが次のページにリロードされると、表示された寿命が終了します。

于 2010-11-13T14:53:22.250 に答える
2

GearsとHTML5には、HttpRequestAJAXを介してファイルのアップロードを送信するためのprogressイベントがオブジェクトにあります。

http://developer.mozilla.org/en/Using_files_from_web_applications

他の人がすでに答えている他のオプションは次のとおりです。

  1. Flashベースのアップローダー。
  2. Javaベースのアップローダー。
  3. 受信したデータのサイズを報告するためのWebサーバーまたはスクリプトへの2番目のコメットスタイルのリクエスト。Lighttpdなどの一部のWebサーバーは、外部スクリプトまたはプロセスを呼び出すオーバーヘッドを節約するために、これをインプロセスで実行するモジュールを提供します。

技術的には、YouTubeのアップロードと同様に4番目のオプションがあります。GearsまたはHTML5では、blobを使用してファイルを小さなチャンクに分割し、各チャンクを個別にアップロードできます。各チャンクが完了すると、進行状況を更新できます。

于 2010-03-10T13:16:03.973 に答える
2

HTML5では、ファイルアップロードの進行状況を監視できるファイルアップロードAPIが導入されましたが、古いブラウザの場合は、ファイルアップロードを監視し、それらに関する情報を提供するために特別に作成されたフレームワークがpluploadにあります。さらに、コールバックがたくさんあるので、すべてのブラウザで機能します

于 2011-03-24T22:05:13.673 に答える
2

もう 1 つのアップローダ フル JS : http://developers.sirika.com/mfu/

  • その無料 (BSD ライセンス)
  • 国際化可能
  • クロスブラウザ対応
  • APC をインストールするかどうかを選択できます (プログレス バーを決定する VS プログレス バーを決定する)
  • Dojo テンプレート メカニズムを使用しているため、外観をカスタマイズできます。CSSに従って、teテンプレートにクラス/ IDを追加できます

楽しんで

于 2010-05-14T07:18:59.033 に答える
1

プログレス バーを作成するには、Javascript を使用する必要があります。簡単な Google 検索で、この記事にたどり着きました: WebAppers Simple Javascript Progress Bar with CSS

Dojo File Upload Progress Bar Widgetは、Dojo Javascript フレームワークを使用する別のオプションです。

編集: 多数の画像 (フォト アルバムなど) をアップロードし、それらを PHP スクリプトに投稿すると仮定すると、javascript を使用して投稿から結果を読み取り、アップロードされた画像の数に基づいて進行状況バーを更新できます。 / 画像の総数。これには、各投稿が完了した後にのみ更新されるという副作用があります。JS で投稿する方法については、こちらをご覧ください。

于 2009-05-11T17:56:33.743 に答える